Description
Input
Output
Sample Input
1 2 3 10
Sample Output
1
2
5
16796
Hint
The result will be very large, so you may not process it by 32-bit integers.
本题为catalan数的一个简单应用实例
catalan数的递推公式h(n)=h(n-1)*(4*i-2)/(i+1)
ac代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int a[1005][1005]; void calatan() { memset(a,0,sizeof(a)); a[1][1]=1; int len=1; for(int i=2;i<=1000;i++) { int c=0; for(int j=1;j<=len;j++) { int s=a[i-1][j]*(4*i-2)+c; a[i][j]=s%10; c=s/10; } while(c) { a[i][++len]=c%10; c=c/10; } for(int j=len;j>=1;j--) { int s=a[i][j]+c*10; a[i][j]=s/(i+1); c=s%(i+1); } while(!a[i][len]) { len--; } } } int main() { calatan(); int n; while(cin>>n) { int k; for(int i=1000;i>=1;i--) { if(a[n][i]!=0) { k=i; break; } } for(int i=k;i>=1;i--) cout<<a[n][i]; cout<<endl; } return 0; } h(n)=h(n-1)*(4*n-2)/(n+1);