[Jobdu]タイトル1390:長方形オーバーライド

3441 ワード

タイトルの説明:
2*1の小さな矩形で横になったり、縦になったりして、より大きな矩形を覆うことができます.すみません、n個の2*1の小さい矩形で重ならずに1個の2*nの大きい矩形を覆って、全部で何種類の方法がありますか? 
入力:
入力には、各テストケースについて、複数のテストケースが含まれる場合があります.
入力は、nが偶数である整数n(1<=n<=70)を含む.
出力:
各テストケースに対応し、
出力はn個の2*1の小さな矩形で1個の2*nの大きな矩形を重ならずに覆い、合計である方法数である.
サンプル入力:
4

サンプル出力:
5

実は階段を跳ぶのです!
/*長尺n*2のオーバーライド問題を分解し、第1歩目は、1つの2*1のブロックを縦にオーバーライドすると、残りは2*(n-1)ブロックとなり、そうでなければ、横にオーバーライドすると、2つのブロックを適用し、1つの2*2のブロックをオーバーライドし、残りの2*(n-2)をオーバーライドする方法がそれぞれ1つあり、この問題は再帰f(n)=f(n-1)+f(n-2)*/
 1 #include <iostream>

 2 using namespace std;

 3 

 4 long long res[71];

 5 

 6 void init()

 7 {

 8     res[0] = 1;

 9     res[1] = 1;

10     for (int i = 2; i < 72; i++) {

11         res[i] = res[i-1] + res[i-2];

12     }

13     return;

14 }

15 

16 int main()

17 {

18     init();

19     int n;

20     while (cin >> n) {

21         cout << res[n] << endl;

22     }

23     return 0;

24 }