[Jobdu]タイトル1390:長方形オーバーライド
3441 ワード
タイトルの説明:
2*1の小さな矩形で横になったり、縦になったりして、より大きな矩形を覆うことができます.すみません、n個の2*1の小さい矩形で重ならずに1個の2*nの大きい矩形を覆って、全部で何種類の方法がありますか?
入力:
入力には、各テストケースについて、複数のテストケースが含まれる場合があります.
入力は、nが偶数である整数n(1<=n<=70)を含む.
出力:
各テストケースに対応し、
出力はn個の2*1の小さな矩形で1個の2*nの大きな矩形を重ならずに覆い、合計である方法数である.
サンプル入力:
サンプル出力:
実は階段を跳ぶのです!
/*長尺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)*/
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 }