矩形覆盖
C++,还是动态规划,也是斐波那契数列,当然边界条件有点不一样的。
思路如下:
- 显然
f(1) = 1
- 显然
f(2) = 2
-
当面积为3x2的时候,填充可以两种填充方式
- 由1x2再填充两块砖填满3x2;
- 有2x2再填充一块砖填满3x2;
- 上述1本来有两种填充得到3x2,但是有一种和2x2重叠了,所以实际上也只有一种;
- 即
f(3) = f(2) + f(1)
- 同理
f(n) = f(n-1) + f(n-2)
代码如下:
class Solution {
public:
int rectCover(int number) {
int dp[50];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= number; i++)
dp[i] = dp[i-2] + dp[i-1];
return dp[number];
}
};