HDU 2046 骨牌鋪方格

HDU    2046   

骨牌鋪方格

http://acm.hdu.edu.cn/showproblem.php?pid=2046

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 42141    Accepted Submission(s): 20464


Problem Description
在2×n的一個長方形方格中,用一個1× 2的骨牌鋪滿方格,輸入n ,輸出鋪放方案的總數.
例如n=3時,爲2× 3方格,骨牌的鋪放方案有三種,如下圖:
 

Input
輸入數據由多行組成,每行包含一個整數n,表示該測試實例的長方形方格的規格是2×n (0<n<=50)。
 

Output
對於每個測試實例,請輸出鋪放方案的總數,每個實例的輸出佔一行。
 

Sample Input
1 3 2
 

Sample Output
1 3 2


題意分析:

               要鋪第 n 塊,則n - 1 塊鋪好了,或者沒鋪好;

                                       1.若鋪好了則只需豎着鋪好就行,即有f(n - 1)種方法;

                                       2. 若沒鋪好則需將兩個方塊在 n - 2 塊已經放好的基礎上橫着放好,也是對應的種數,即f(n - 2)種;

                                       3.所以   f(n) = f(n - 1) + f(n - 2).

#include<iostream>

using namespace std;

int main(void)
{
    _int64 s[52];
    s[1] = 1, s[2] = 2;
    for (int i = 3; i < 51; i++)
    {
        s[i] = s[i - 1] + s[i - 2];
    }
    int N;
    while (cin >> N)
        cout << s[N] << endl;
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章