HDOJ 2046 骨牌铺方格 【递推】
铺2*1只有一种情况(一竖)
2*2有两种情况(两横或两竖)
2*n (n≥3)时
可以先铺1块竖着,再铺n-1块
还有先铺2块横着(两块竖着和第一种有重复),再铺n-2块
f(1) = 1
f(2) = 2
f(n) = f(n-1) + f(n-2)
注意long long & I64d
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
int n;
ll f[55];
void Pre(){
f[1] = 1;
f[2] = 2;
for(int i = 3; i <= 50; i++) f[i] = f[i-1] + f[i-2];
}
int main(){
Pre();
while(~scanf("%d", &n)) printf("%I64d\n", f[n]);
return 0;
}