讨论 / 题解//高精度+动态规划
迪达拉 2017-09-24 05:10:51
点我顶贴 收藏 删除
#include<cstdio>

#include<algorithm>

using namespace std;

int n,m,ans;

struct bignum

{

int num[80],tot;

bignum operator +(const bignum &a)

{

tot=max(tot,a.tot);

int r=0;

for(int i=1; i<=tot; i++)

{

num[i]+=a.num[i]+r;

r=num[i]/10;

num[i]%=10;

}

if(r>0)

{

tot++;

num[tot]=r;

}

return *this;

}

bignum printf()

{

for(int i=tot;i>0;i--)

{

putchar(num[i]+'0');

}

return *this;

}

}f[61][61][61];//高精度

int main()

{

scanf("%d",&n);

f[0][0][0].num[1]=1;

f[0][0][0].tot=1;

for(int i=0;i<=n;i++)

for(int j=0;j<=n;j++)

for(int k=0;k<=n;k++)

{

if (!i&&!j&&!k) continue;

if (i<k||i<j||j<k) continue;

if (i>j&&i>k&&i) f[i][j][k]=f[i][j][k]+f[i-1][j][k];//判断

if (j>k&&j) f[i][j][k]=f[i][j][k]+f[i][j-1][k];//判断

if (k) f[i][j][k]=f[i][j][k]+f[i][j][k-1];//判断

}

f[n][n][n].printf();

return 0;

}

查看更多回复
提交回复