注意n=0算1种,一直按0算的,我吐了。
#include<bits/stdc++.h>
using namespace std;
int dp[300][1000],n;
void sum(int *a,int *b,int *c) { //a+2*b放到c中
for(int i=0; i<990; i++) {
c[i]+=a[i]+2*b[i];
if(c[i]>=10) {
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
}
int main() {
dp[1][0]=1;
dp[2][0]=3;
for(int i=3; i<=250; i++) {
sum(dp[i-1],dp[i-2],dp[i]);
}
while(scanf("%d",&n)!=EOF) {
int l=990;
while(l>=0&&dp[n][l]==0) l--;
for(int i=l; i>=0; i--) printf("%d",dp[n][i]);
if(l==-1) printf("1");
printf("\n");
}
}