- 题目描述:
-
我们可以用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 }