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;
}