题意:用2*1或者2*2的砖铺2*n有多少种铺法。
思路:容易知道递推式为f[n] = 2*f[n-2]+f[n-1]。用数组表示即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdlib>
using namespace std;
#define clc(s,t) memset(s,t,sizeof(s))
#define INF 0x3fffffff
#define N 250
int s[260][1000];
int n;
void create(){
int i,j;
clc(s,0);
s[0][0] = s[1][0] = 1;
for(i = 2;i<=250;i++){
for(j = 0;j<995;j++)
s[i][j] = s[i-1][j];
for(j = 0;j<995;j++){
s[i][j] += s[i-2][j]*2;
s[i][j+1] += s[i][j]/10;
s[i][j] %= 10;
}
}
}
void print(int s[1000]){
int i;
for(i = 995;!s[i];i--)
;
for(;i>=0;i--)
printf("%d",s[i]);
putchar('\n');
}
int main(){
create();
while(scanf("%d",&n) != EOF)
print(s[n]);
return 0;
}