找递推规律,和大数相加(方法很好)
code:
f[1]=1;f[2]=2,f[3]=4,f[4]=7
在f[4]地方错了一次
#include<iostream>
using namespace std;
int f[1005][1201];
int main()
{
int i,j;
memset(f,0,sizeof(f));
f[1][1200]=1;
f[2][1200]=2;
f[3][1200]=4;
f[4][1200]=7;
//printf("111\n");
for(i=5;i<=1000;i++)
{
for(j=1200;j>=0;j--)
{
f[i][j]=f[i-1][j]+f[i-2][j]+f[i-4][j];
}
for(j=1200;j>=0;j--)
{
if(f[i][j]/10>0)
{
f[i][j-1]+=f[i][j]/10;
f[i][j]%=10;
}
}
}
int n;
while(scanf("%d",&n)>0)
{
for(j=0;j<=1200;j++)
if(f[n][j]!=0)
break;
for(;j<=1200;j++)
printf("%d",f[n][j]);
printf("\n");
}
return 0;
}