也是一道dp,思想是:节点数为i,深度为k的树的个数 = 节点数为j,深度为k1的树的个数 乘以 节点数为i-j-1,深度为k2的树的个数, 其中k1,k2可有节点数确定范围。dp的方程式为:dp[i][max(k1,k2)+1] += dp[j][k1]*dp[i-j-1][k2];
/*
ID: xpli1
PROG: nocows
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#define IN fin
#define OUT fout
#define max(a,b) (((a) > (b)) ? (a) : (b))
ifstream fin ("nocows.in", ios::in);
ofstream fout("nocows.out",ios::out);
int n,k;
int dp[201][101];
int main(){
IN >> n >> k;
int i,j,k1,k2;
dp[1][1] = 1;
for(i = 3; i <= n; i+=2){
for(j = 1; j < i - 1; j+=2){
for(k1 = 1; k1 <= (j+1)/2; k1++){
for(k2 = 1; k2 <= (i-j)/2; k2++){
dp[i][max(k1,k2)+1] += dp[j][k1]*dp[i-j-1][k2];
dp[i][max(k1,k2)+1] %= 9901;
}
}
}
}
OUT << dp[n][k] << endl;
return 0;
}