标签:
1 2 3 10
1 2 5 16796HintThe result will be very large, so you may not process it by 32-bit integers.
#include<stdio.h> #include<string.h> const int MAXN=200; int catalan[105][MAXN]; int temp[MAXN]; void create(){ memset(catalan,0,sizeof(catalan)); catalan[1][0] = 1; int i,j,res; for(i = 2; i <= 100; ++i) { int mid = 4*i-2; for(j = 0;j < MAXN;++j){ catalan[i][j] += catalan[i-1][j] * mid; if(catalan[i][j]>=10){ catalan[i][j+1] += catalan[i][j]/10; catalan[i][j] = catalan[i][j]%10; } } memset(temp,0,sizeof(temp)); mid=i+1; res=0; for(j=MAXN-1;j>=0;--j){ temp[j] = (res*10 + catalan[i][j])/mid; res = (10*res + catalan[i][j])%mid; } for(j=0; j<MAXN; ++j){ catalan[i][j] = temp[j]; } } } int main(){ create(); int n; while(~scanf("%d",&n)){ int i=MAXN-1; while(!catalan[n][i]) --i; for(;i>=0;--i){ printf("%d",catalan[n][i]); } printf("\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdoj-1023-Train Problem II【卡特兰数】
标签:
原文地址:http://blog.csdn.net/qq_18062811/article/details/47342733