1. 程式人生 > >HDOJ-2046 骨牌鋪方格(遞推)

HDOJ-2046 骨牌鋪方格(遞推)

題目:HDOJ-2046

題目描述:在2×n的一個長方形方格中,用一個1× 2的骨牌鋪滿方格,輸入n ,輸出鋪放方案的總數.
例如n=3時,為2× 3方格,骨牌的鋪放方案有三種,如下圖:
在這裡插入圖片描述
思路:(遞推)
對n位置情況進行討論
①n位置1個骨牌豎著放,對前n-1無影響,所以等於f(n-1)
②n位置2個骨牌橫著放,n-1位置被佔用,但對前n-2無影響,所以等於f(n-2)

綜上,f(n)=f(n-1)+f(n-2)

貼下程式碼:(記得用long long)

#include<iostream>
using namespace std;
int main()
{ long long f[51]; int i, n; f[1] = 1; f[2] = 2; f[3] = 3; for (i = 4; i <= 50; i++) f[i] = f[i - 1] + f[i - 2]; while (cin>>n) { cout << f[n] << endl; } return 0; }