Count UVA - 1645

题意:输入n(n<=1000),统计有多少个n结点的有根树,使得每个深度中所有节点得子节点数相同

思路:除掉第一个节点必须被放置为根节点之外,还剩下n-1个节点,那么这n-1个节点可以平均(注意是平均)分为多少个等分,那么每个等分也就可以继续等分划分,将所有的这些情况求和即可。递推无能,烦死了

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
//    freopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);
const int maxn = 1000 + 2;
int n,d[maxn];
void init()
{
    d[1] = 1;
    for(int i = 2;i <= 1000;i++)
    {
        for(int j = 1;j < i;j++)
        {
            if((i - 1) % j == 0) d[i] += d[j];
            d[i] = d[i] % mod;
        }
    }
}
int main()
{
    init();
    int kase = 1;
    while(scanf("%d",&n) != EOF)
    {
        printf("Case %d: %d\n",kase++,d[n]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sgsyacm/article/details/87115549
今日推荐