题目描述
一个有 n 个节点,深度为 k 的无标号完满二叉树(即每个节点的儿子数为 0 或 2)有多少种结构?定义根节点深度为 1。
答案对 9901 取模。
输入格式
两个空格分开的整数 n,k。
输出格式
输出一行一个整数表示答案。
输入输出样例
输入 #1
5 3
输出 #1
2
说明/提示
【数据范围】
对于 100% 的数据,3≤n<200,2≤k<100。
USACO 2.3
#include<bits/stdc++.h>
using namespace std;
const int N=205;
int n,k,f[N][N]; //f[i][j]表示i个结点,高度为1,2~j的方案总数
int main(){
cin>>n>>k;
for(int i=1;i<=k;++i)
f[1][i]=1;
for(int i=3;i<=n;i+=2)
for(int j=1;j<=k;++j){ //求f[i][j]
for(int x=1;x<=i-2;++x){ //f[x][j-1]
f[i][j]+=(f[x][j-1]*f[i-x-1][j-1])%9901;
f[i][j]%=9901;
}
}
cout<<(f[n][k]-f[n][k-1]+9901)%9901;
return 0;
} //动态规划