矩形覆盖

你快乐吗?

Posted by bbkgl on September 26, 2019

矩形覆盖


C++,还是动态规划,也是斐波那契数列,当然边界条件有点不一样的。

思路如下:

  • 显然f(1) = 1
  • 显然f(2) = 2
  • 当面积为3x2的时候,填充可以两种填充方式

    1. 由1x2再填充两块砖填满3x2;
    2. 有2x2再填充一块砖填满3x2;
    3. 上述1本来有两种填充得到3x2,但是有一种和2x2重叠了,所以实际上也只有一种;
    4. 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];
    }
};