array(2) { ["docs"]=> array(0) { } ["count"]=> int(0) } 111string(0) "" int(1) int(10) int(70) int(8640000) string(13) "likecs_art_db" array(1) { ["query"]=> array(1) { ["match_all"]=> object(stdClass)#28 (0) { } } } array(1) { ["createtime.keyword"]=> array(1) { ["order"]=> string(4) "desc" } } int(10) int(0) int(8640000) array(2) { ["docs"]=> array(0) { } ["count"]=> int(0) } [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 }

 

相关文章: