题意已经很清楚了,主要就是找递推式:
sum[i]=sum[i-1]+2*sum[i-2];
需要用到大数,不过这种普通的大数加法已经很熟了
#include<iostream>
#include<algorithm>
using namespace std;
int sum[1010][100],len[1010];
void init()
{
sum[0][0]=0;len[0]=0;
sum[1][0]=0;len[1]=0;
sum[2][0]=1;len[2]=0;
for(int i=3;i<=1000;i++)
{
int k,j;
k=0;
for(j=0;j<=len[i-2];j++)
{
int temp=sum[i-1][j]+sum[i-2][j]*2+k;
k=temp/10000;
sum[i][j]=temp%10000;
}
while(j<=len[i-1])
{
int temp=sum[i-1][j]+k;
k=temp/10000;
sum[i][j]=temp%10000;
j++;
}
if(k!=0)
{
sum[i][j]=k;
len[i]=j;
}
else len[i]=j-1;
}
}
int main()
{
init();
int n;
while(scanf("%d",&n)==1)
{
int l=len[n];
printf("%d",sum[n][l]);
for(int i=l-1;i>=0;i--)
printf("%04d",sum[n][i]);
printf("\n");
}
return 0;
}