題目描述:
-
我們可以用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
輸入:
-
輸入可能包含多個測試樣例,對於每個測試案例,
輸入包括一個整數n(1<=n<=70),其中n為偶數。
輸出:
-
對應每個測試案例,
輸出用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有的方法數。
樣例輸入:
-
4
樣例輸出:
- 5
解題思路:
- 觀察題目中的矩形,2*n的,是個長條形。本來腦中想象的是復雜的華容道,但是既然只是簡單的長條形,那么依然逆向分析。既然是長條形的,那么從后向前,最后一個矩形2*2的,只有兩種情況:
-
- 第一種是最后是由一個2*(n-1)的矩形加上一個豎着的2*1的矩形
- 另一種是由一個2*(n-2)的矩形,加上兩個橫着的2*1的矩形
- 因此我們可以得出,
- 第2*n個矩形的覆蓋方法等於第2*(n-1)加上第2*(n-2)的方法。使用代碼可以表示為:
for(i=3;i<71;i++){ arr[i] = arr[i-1]+arr[i-2]; }
仍然要注意數據類型,為long long型
代碼:
#include <stdio.h> long long arr[71] = {0,1,2}; void createArr(void){ int i; for(i=3;i<71;i++){ arr[i] = arr[i-1]+arr[i-2]; } } int main(void){ int n; createArr(); while(scanf("%d",&n) != EOF && n>=1 && n<=70){ printf("%lld\n",arr[n]); } return 0; } /************************************************************** Problem: 1390 User: xhalo Language: C Result: Accepted Time:0 ms Memory:916 kb ****************************************************************/