1. 程式人生 > >2.3.2 COW PEDIGREES 奶牛家譜

2.3.2 COW PEDIGREES 奶牛家譜

解題思路:    
1.簡單動態規劃。基本思想是用小的二叉樹去組成大的二叉樹,最後輸出dp[k][n]-dp[k-1][n]恰好就是要求的n個
    點組成深度最多為k的方法數
2.設dp[i][j]表示j個點組成深度最多為i的二叉樹的方法數,則動態規劃公式為:
    dp[i][j]=∑(dp[i-1][l]*dp[i-1][j-1-l])(1<=l<=j-2)
    dp[i][1]=1
3.注意:點的個數總為奇數。

核心程式碼:

for(i=1;i<=k;i++)
        dp[i][1]=1;
    for(i=1;i<=k;i++)
        for(j=3;j<=n;j+=2)
            for(l=1;l<=j-2;l+=2)
                dp[i][j]=(dp[i][j]+dp[i-1][l]*dp[i-1][j-1-l])%9901;