简单的递推,要用大整数。
递推式为
a[i] = a[i-1]+a[i-2]*2;
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
char S[260][300];
void F(int x)
{
int y = x-1, z = x-2;
int s[300];
memset(s,0,sizeof(s));
int leny = strlen(S[y]);
int lenz = strlen(S[z]);
int len = max(leny,lenz);
for (int i = 0; i < len; i++)
{
if (i<leny)
s[i] = s[i] + (S[y][leny-i-1]-'0');
if (i<lenz)
s[i] = s[i] + (S[z][lenz-i-1]-'0')*2;
if (s[i]>9)
{
s[i+1]=s[i+1]+s[i]/10;
s[i]%=10;
}
}
if (s[len]==1)
{
for (int i = 0; i <= len; i++)
S[x][i] = s[len-i]+'0';
}
else
{
for (int i = 0; i < len; i++)
S[x][i] = s[len-i-1]+'0';
}
}
int main(void)
{
memset(S,0,sizeof(S));
strcpy(S[0],"1");
strcpy(S[1],"1");
strcpy(S[2],"3");
for (int i = 3; i <= 250; i++)
F(i);
int n;
while (~scanf("%d", &n))
printf("%s\n",S[n]);
return 0;
}