计蒜客 奇异家庭

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37960603/article/details/82224434

题目传送门

dp[i][j] – i 个节点不超过 j 层的方案数
有dp[i][j]+=dp[t][j-1]*dp[i-t-1][j-1]
根节点左子树dp[t][j-1] , 右子树dp[i-t-1][j-1]
代码:

#include<bits/stdc++.h>
using namespace std;

const int maxn=210;
const int mod=9901;

int dp[maxn][maxn];

int main(){

    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=k;i++) dp[1][i]=1;
    for(int i=2;i<=k;i++) 
        for(int j=3;j<=n;j+=2) 
            for(int t=1;t<=j-2;t+=2) dp[j][i]+=(dp[t][i-1]*dp[j-t-1][i-1]),dp[j][i]%=mod;
    printf("%d\n",(dp[n][k]-dp[n][k-1]+mod)%mod);
}

猜你喜欢

转载自blog.csdn.net/qq_37960603/article/details/82224434