2012ACM/ICPC成都賽區現場賽I題---Count(hdu4472)

     題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=4472

    題目大意:給你N個節點,求用這N個節點組成的軸對稱的異構的樹的數量。

    思路:n=1時,只有一顆;n=2時,也只有一顆,n=3時,有兩顆;關於根節點那一個軸對稱,則根節點下一定是m顆都含有k個節點的樹,而且m*k=n-1(除去根節點);即n個節點組成對稱樹的數量等於1....n-1中,能被n-1整除的數的節點數的對稱的樹的總和,一種動規的思想。

代碼:

#include<cstdio>
#include<cstring>
int ans[1005];
void getans()
{
    ans[1]=1;
    ans[2]=1;
    ans[3]=2;
    ans[4]=3;
    for(int i=5;i<1001;i++)
    {
        for(int j=1;j<i;j++)
        {
            if((i-1)%j == 0)
               {
                   ans[i] += ans[j];
                   ans[i]  %= 1000000007;
               };
        }
    }
}
int main()
{
    int n,ncase=1;
    memset(ans,0,sizeof(ans));
    getans();
    while(scanf("%d",&n)!=EOF)
    {
        printf("Case %d: %d\n",ncase++,ans[n]);
    }
    return 0;
}


 

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