1 2 3
1 2 5
#include<stdio.h>
#include<string.h>
const int maxn=500;
int catalan[101][maxn];
void make(){
catalan[1][0]=1;
int i,j,t,res;
int temp[maxn];
memset(temp,0,sizeof(temp));
for(i=2;i<=100;++i){
t=4*i-2;
for(j=0;j<maxn;++j){
catalan[i][j]+=catalan[i-1][j]*t;
}
for(j=0;j<maxn;++j){
if(catalan[i][j]>=10){
catalan[i][j+1]+=catalan[i][j]/10;
catalan[i][j]%=10;
}
}
t=i+1;res=0;
for(j=maxn-1;j>=0;--j){
res=res*10+catalan[i][j];
temp[j]=res/t;
res%=t;
}
for(j=maxn-1;j>=0;--j){
catalan[i][j]=temp[j];
}
}
}
int main(){
make();
int n;
while(~scanf("%d",&n)){
int i=maxn-1;
while(catalan[n][i]==0) --i;
for(;i>=0;--i){
printf("%d",catalan[n][i]);
}
printf("\n");
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
hdoj-1130-How Many Trees?【卡特兰数】
原文:http://blog.csdn.net/qq_18062811/article/details/47424391