Description
公元XXXX年,XX系的n个星球即将结盟,联盟决定在星球之间建立若干条超光速运输航道,以便使任两个星球间都可以直接或间接通过超光速航道快速运输货物。联盟希望建立尽量少的航道,因为这种航道造价极其昂贵。科学家们以证实这n个星球任两个之间都可建航道,而且每条航道创建的费用近似一样,但一个星球最多只能跟3个星球直接相连。
你的任务是求出满足要求的总方案数,这个数可能很大,你只要求出方案数mod 10001的值就行了。
Input
只有一个整数n(1<=n<=200),表示星球数。
Output
输出一个整数,为满足要求的方案总数对10001求余后的结果。
Sample Input
5
Sample Output
120
重点在于prufer序列的应用
#include<cstdio>
using namespace std;
const int N=201;
const int mod=10001;
int n,f[N];
int main() {
scanf("%d",&n);
f[0]=1;
for(int i=1;i<=n;i++) {
for(int j=n-2;j>=1;j--) {
f[j]+=f[j-1]*j;
if(j>1) f[j]+=f[j-2]*j*(j-1)/2;
f[j]%=mod;
}
}
if(n==1) printf("1");
else printf("%d",f[n-2]);
}
醉卧沙场君莫笑,古来征战几人回