新年的第一篇博文
给自己加油 !!告别寒假的安逸 为梦想迈出一小步、、、、
http://acm.hdu.edu.cn/showproblem.php?pid=1134
题意:2N个人依序站成一圈,两两组成一队,不能交叉,组合的组数
http://acm.hdu.edu.cn/showproblem.php?pid=1130
题意:给定N个节点,能构成多少种不同的二叉树。
代码一样,如下:
#include<iostream>
using namespace std;
int num[101][101]={0};//强烈怀疑:101错误的写成100.
答案就是错误的。Why?
void Catalan()
{
int i,j;
num[0][0]=1;
num[1][0]=1;
int len=1;
int flag;
for(i=2;i<101;i++)
{
//乘4n-2
int k=4*i-2;
flag=0;
for(j=0;j<=len;j++)
{
int z=flag+num[i-1][j]*k;
num[i][j]=z%10;
flag=z/10;
}
while(flag)
{
num[i][j++]=flag%10;
flag/=10;
}
len=j;flag=0;
//除n+1
while(j>=0)
{
int w=num[i][j]+flag*10;
num[i][j]=w/(i+1);
flag=w%(i+1);
j--;
}
}
}
int main()
{
Catalan();
int n,i;
while(cin>>n&&n>0)
{
i=99;
while(num[n][i]==0)
{i--;}
while(i>=0)
{
cout<<num[n][i];
i--;
}
cout<<endl;
}
return 0;
}
此处 Catalan数的详细资料,讲解非常详细。留个链接,随时解疑答惑