要是c语言可以和java一样写大数就好了,或者我会写重载就好了,最后还是只能暴力一把。
开始写的记忆化搜索,然而n=10就超过LL了
#include<cstdio> #include<cstdlib> #include<iostream> #include<memory.h> #include<algorithm> #include<algorithm> #include<cstring> #include<string> using namespace std; #define LL long long int a[61][61][61][110],n; void _add(int x,int y,int z,int u,int v,int w) { for(int i=1;i<=100;i++){ a[x][y][z][i]+=a[u][v][w][i]; a[x][y][z][i+1]+=a[x][y][z][i]/10; a[x][y][z][i]%=10; } } void _print() { int i,j,k; for(i=100;i>1;i--) if(a[n][n][n][i]!=0) break; for(;i>=1;i--) printf("%d",a[n][n][n][i]); printf(" "); } int main() { int i,j,k; a[0][0][0][1]=1; for(i=1;i<=60;i++) for(j=0;j<=i;j++) for(k=0;k<=j;k++) { if(k>0) _add(i,j,k,i,j,k-1); if(i>j) _add(i,j,k,i-1,j,k); if(j>k) _add(i,j,k,i,j-1,k); } while(~scanf("%d",&n)){ _print(); } return 0; }