[Jobdu] 题目1390:矩形覆盖

题目描述:

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入包括一个整数n(1<=n<=70),其中n为偶数。

输出:

对应每个测试案例,

输出用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有的方法数。

样例输入:
4
样例输出:
5

其实就是跳台阶!

/*把长条n*2的覆盖问题分解,第一步,若竖着覆盖一个2*1的方块,那么剩下的为2*(n-1)块,
否则,若横着覆盖,应用两块,覆盖一个2*2的块,剩下2*(n-2),这两种覆盖的方式都各有一种
于是,这个问题等同于递归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 }
原文地址:https://www.cnblogs.com/easonliu/p/3654672.html