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];
}
};