【[SHOI2002]空中都市】
此题题意非常简单,就是画一个有个结点的图,使得图中不存在一个含有三个点的子图,问最多可以有多少条边。
很显然,当时答案肯定是
,因为当
时不管怎么架桥都必须要拆一座。
那?之后呢?
我们可以很容易地发现,对于每一个,连的边数一定是
的边数
,即
对于每一个
为什么呢?
很简单,因为假设我们多连一条边,那么一定会有一条冗余的一条边。我们可以假设个点组成的
组成的那个图,那么会有一个孤点,我们可以将这个点连若干条边,可以顺次连,当我们连到
时就会组成三角形
,这个很简单,泥萌应该都知道吧。
之后,就是代码啦:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int f[10005];
f[0]=0;//初始一下
for(int i=1;i<=n;i++)
f[i]=f[i-1]+(i/2);//套上面的公式,相当于一个小递推
cout<<f[n];//输出第N个
return 0;
} 于是你就了一道远古时代的被恶评的省选题