遞推:HDU 骨牌鋪方格

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個元素加入,看對整個方案的影響

分析:
我們用f(n)表示2 * n的方格的方法數
2 * n的方格是在2 * (n-1)方格的基礎上加上一塊2 * 1的格子,而這塊2*1的方格有兩種擺法
①如果前面的n-1塊已經放好,只有一種放法,這第n塊只能豎着放一塊
②如果前面的n-2塊已經放好,只有一種放法,這第n-1~n塊可以橫着放兩塊
所以f(n)=f(n-1)+f(n-2)

#include<bits/stdc++.h>
using namespace std;
long long a[55];
int main()
{
	 int n;
	 while(cin>>n)
	 {
	 	a[1]=1;
	 	a[2]=2;
	 	for(int i=3;i<=n;i++)
	 	a[i]=a[i-1]+a[i-2];
	 	cout<<a[n]<<endl;
	 }
	 return 0;
}

這題用遞歸做會超時,遞推題最好還是用遞推做。
借鑑:(這篇博客有圖解)可以看看
杭電OJ——2046 骨牌鋪方格(簡單的推斷題)


遞推算法總結:
遞推算法

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