Leetcode74双周赛- 用地毯覆盖后的最少白色砖块(DP)

题目链接

题意

n个格子黑或白,k个区间可以覆盖它们,如何覆盖,使白格子最少

思路

动态规划
状态表示f[i][j]:表示用i个区间覆盖1~j个格子的所有方案,属性:最小白色格子数
状态划分:根据最后一个区间是否包含第i个格子进行划分
不包含:f[i][j] = f[i][j - 1] + floor[j] - '0'
包含:f[i][j] = min(f[i][j], f[i - 1][j - m])

class Solution {
public:
    int f[1010][1010];
    int minimumWhiteTiles(string floor, int k, int m) {
        int cnt = 0;
        for(int i = 0; i < floor.size(); i ++ )
        {
            cnt += floor[i] - '0';
            f[0][i] = cnt;
        }
        for(int i = 1; i <= k; i ++ )
            for(int j = m; j < floor.size(); j ++ )
            {
                f[i][j] = f[i][j - 1] + floor[j] - '0';
                f[i][j] = min(f[i][j], f[i - 1][j - m]);
            }
        return f[k][floor.size() - 1];
    }
};
posted @ 2022-03-21 16:37  inss!w!  阅读(28)  评论(0编辑  收藏  举报