OJ:http://www.luogu.org/problem/show?pid=1472
#include<iostream> using namespace std; const int MOD=9901; const int maxn=200+5; const int maxk=100+5; int dp[maxn][maxk]; int v[maxn][maxk]; int N,K; void init(){ for(int i=0;i<maxn;i++) for(int j=0;j<maxk;j++) v[i][j]=0; } int Search(int n,int s){ if(v[n][s]) return dp[n][s]; v[n][s]=1; if(n==1) return dp[n][s]=1; if(s==1) return dp[n][s]=0; int ans=0; for(int i=1;i<n-1;i++){ ans+=Search(i,s-1)*Search(n-i-1,s-1); ans%=MOD; } return dp[n][s]=ans; } int main() { init(); cin>>N>>K; cout<<(Search(N,K)-Search(N,K-1)+MOD)%MOD; return 0; }