hdu 4472 count

給出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[n]);
    }
    return 0;
}

了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章