zoukankan      html  css  js  c++  java
  • (DP) 矩形覆盖

    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

    https://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6

    做法:用第一个2*1的小矩形去覆盖 2*i 的大矩形的最左边时有两种选择:竖着放或横着放。当竖着放时,右边还剩下2*(i-1)的区域,这种情况的覆盖方法记为f[i-1];横着放2*1的小矩形在左上角时,此时左下角必须也横着放2*1的小矩形,此时右边还剩下2*(i-2)的区域,这种情况的覆盖方法记为f[i-2],则f[i] = f[i-1] + f[i-2]。

    class Solution {
    public:
        int rectCover(int number) {
            int f[number+1];
            f[0] = 0;
            f[1] = 1;
            f[2] = 2;
            for(int i=3; i<=number; i++){
                f[i] = f[i-1]+f[i-2];
            }
            return f[number];
        }
    };
  • 相关阅读:
    POJ 2002 Squares
    POJ 1840 Eqs
    POJ 1759 Garland
    UVA 572 Oil Deposits
    POJ 3278 Catch That Cow
    POJ 2488 A Knight's Journey
    UVA 699 The Falling Leaves
    [Poi1999] 原始生物
    [bzoj3033] 太鼓达人
    [bzoj1123] BLO
  • 原文地址:https://www.cnblogs.com/Bella2017/p/11823867.html
Copyright © 2011-2022 走看看