nefu993计数问题

来源:互联网 发布:madness淘宝店哪个真 编辑:程序博客网 时间:2024/05/17 09:00
我们把根节点去掉,得到m棵子树,这些子树的形状一定是相同的,
而且节点数也一定相同,


因此我们考虑 把(n-1)个节点分成m份,F[N]+=F((N-1)/M),

因为要平均分,所以M是N-1的约数

有一颗又n个节点的树形态不固定。我们对它的形态只有一个要求,那就是同一层的节点所跟的孩子的数目相同,问这个数有多少种形态,结果对1000000007取模

 

Input

每行输入一个数n(1<=n<=1000)

Output

输出结果mod1000000007

 

Sample Input

1

2

3

40

50

600

700

Sample Output

1

1

2

924

1998

315478277

825219749

#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;int f[1005];int a[1005];int cnt;void init(int n){     cnt=0;    // memset(a,0,sizeof(a));     for(int i=1;i*i<=n;i++)     {          if(n%i==0)          {               a[cnt++]=i;               if(i*i!=n) a[cnt++]=n/i;          }     }}void ans(){     //memset(f,0,sizeof(f));     f[1]=1;     for(int i=2;i<1005;i++)     {          init(i-1);          for(int j=0;j<cnt;j++)          f[i]=(f[i]+f[(i-1)/a[j]])%1000000007;     }}int main(){     int n;     ans();     while(~scanf("%d",&n))     {          printf("%d\n",f[n]);     }     return 0;}


0 0
原创粉丝点击