[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 }

 

你可能感兴趣的:(job)