一和零问题
1 |
|
这道题和经典的背包问题很类似,不同的是在背包问题中,我们只有一种容量,而在这道题中,我们有 0 和 1 两种容量。每个物品(字符串)需要分别占用 0 和 1 的若干容量,并且所有物品的价值均为 1。因此我们可以使用二维的动态规划。
我们用 $dp(i, j)$ 表示使用 $i$ 个 $0$ 和 $j$ 个 $1$,最多能拼出的字符串数目,那么状态转移方程为:
1 | if i >= cost_zero[k] and j >= cost_one[k] |
其中 $k$ 表示第 $k$ 个字符串,$cost_zero[k]$ 和 $cost_one[k]$ 表示该字符串中 $0$ 和 $1$ 的个数。我们依次枚举这些字符串,并根据状态转移方程更新所有的 $dp(i, j)$。注意由于每个字符串只能使用一次(即有限背包),因此在更新 $dp(i, j)$ 时,$i$ 和 $j$ 都需要从大到小进行枚举。
最终的答案即为所有 $dp(i, j)$ 中的最大值。
1 |
|
参考文献
作者:LeetCode
链接:https://leetcode-cn.com/problems/ones-and-zeroes/solution/yi-he-ling-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。