您的位置:首页 > 其它

hdu 4472 count

2012-12-03 20:00 288 查看
给出n个节点,满足同层节点的子节点个数相同的树有都少种不同的形态。

n<=1000

F[i]表示 有i个节点的满足要求的方案数,显然F[i]= sum{F[j] | (i-1)%j==0} 表示选出若干棵节点为j的树,给他们找一个公共的根,就是节点个数为i
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
const int MOD = (int)round(1e9+7);
const int maxn= 1000+10;
int F[maxn];
int n,m;
int main()
{
F[1] = 1;
for (int i = 2; i <= 1000;++i)
for (int j = 1; j < i ;++j)
if ((i-1)%j==0)
{
F[i]+=F[j];
if (F[i]>=MOD) F[i]-=MOD;
}
int Test = 0;
while (scanf("%d",&n)==1)
{
printf("Case %d: %d\n",++Test,F
);
}
return 0;
}


了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: