劍指OFFER之矩形覆蓋(九度OJ1390)


題目描述:

我們可以用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
****************************************************************/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM