我不大会推啊……P331
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int f[31],g[31];
int n;
void pre_table()
{
memset(f,0,sizeof(f));
memset(g,0,sizeof(g));
f[0]=f[1]=f[2]=0;
g[0]=1;g[1]=2;g[2]=4;
for(int i=3;i<=30;i++)
{
f[i]+=1<<(i-3);
for(int j=2;j<=i-2;j++)
{
f[i]+=(g[j-2]*(1<<(i-j-2)));
}
g[i]=(1<<i)-f[i];
printf("%d %d\n",i,f[i]);
}
}
int main()
{
pre_table();
while(scanf("%d",&n) && n)
{
printf("%d\n",f[n]);
}
return 0;
}
#include<stdio.h>
int f[31]= {0,0,0,
1,
3,
8,
20,
47,
107,
238,
520,
1121,
2391,
5056,
10616,
22159,
46023,
95182,
196132,
402873,
825259,
1686408,
3438828,
6999071,
14221459,
28853662,
58462800,
118315137,
239186031,
483072832,
974791728
};
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
printf("%d\n",f[n]);
}
return 0;
}