#include<memory.h>
using namespace std;
int f[61][61][61][100];
int len[61][61][61];
int n;
int maxer(int q,int w)
{
if(q>w){return q;}
else{return w;}
}
void sum(int x1,int y1,int z1,int x2,int y2 ,int z2)
{
//cout<<sum<<endl;
int jin=0;
int leng=0;
leng=maxer(len[x1][y1][z1],len[x2][y2][z2]);
for(int i=1;i<=leng+1;i++)
{
f[x1][y1][z1][i]+=(f[x2][y2][z2][i]+jin);
jin=0;
if(f[x1][y1][z1][i]>=10)
{
jin=(int)f[x1][y1][z1][i]/10;
f[x1][y1][z1][i]=f[x1][y1][z1][i];
}
}
len[x1][y1][z1]=leng;
if(f[x1][y1][z1][leng+1]!=0)
{len[x1][y1][z1]++;}
//cout<<x1<<" "<<y1<<" "<<z1<<endl;
// for(int i=len[x1][y1][z1];i>=1;i--)
// cout<<f[x1][y1][z1][i]<<"-";
// cout<<endl;
}
int main()
{
cin>>n;
memset(len,0,sizeof(len));
f[0][0][0][1]=1;
len[0][0][0]=1;
for(int i=0;i<=n;i++)
for(int j=0;j<=i;j++)
for(int k=0;k<=j;k++)
{
if(i>j)
{sum(i,j,k,i-1,j,k);}
if(j>k)
{sum(i,j,k,i,j-1,k);}
if(k>0)
{sum(i,j,k,i,j,k-1);}
}
for(int i=len[n][n][n];i>=1;i--)
cout<<f[n][n][n][i];
//system("pause");
return 0;
}
THX打表哥的测试数据,自己测评全部AC,卡塔兰三阶啥的才不知道呢~~~
但最近RQNOJ3测评拙计,各种吞代码,神错误= =
但一定我的递推是对的!!对!就是这样的说
for(int i=0;i<=n;i++)
for(int j=0;j<=i;j++)
for(int k=0;k<=j;k++)
{
if(i>j)
{sum(i,j,k,i-1,j,k);}
if(j>k)
{sum(i,j,k,i,j-1,k);}
if(k>0)
{sum(i,j,k,i,j,k-1);}
}
递推公式HERE