HDOJ 2046 骨牌鋪方格 【遞推】

HDOJ 2046 骨牌鋪方格 【遞推】

題目鏈接 http://acm.hdu.edu.cn/showproblem.php?pid=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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章