题目链接
英文链接:https://leetcode.com/problems/ones-and-zeroes/
中文链接:https://leetcode-cn.com/problems/ones-and-zeroes/
题目详述
在计算机界中,我们总是追求用有限的资源获取最大的收益。
现在,假设你分别支配着 m 个 0
和 n 个 1
。另外,还有一个仅包含 0
和 1
字符串的数组。
你的任务是使用给定的 m 个 0
和 n 个 1
,找到能拼出存在于数组中的字符串的最大数量。每个 0
和 1
至多被使用一次。
注意:
- 给定
0
和1
的数量都不会超过100
。 - 给定字符串数组的长度不会超过
600
。
示例 1:
1 | 输入: Array = {"10", "0001", "111001", "1", "0"}, m = 5, n = 3 |
示例 2:
1 | 输入: Array = {"10", "0", "1"}, m = 1, n = 1 |
题目详解
- 典型的多维 01 背包问题(本题是二维)。每个字符串看作物品,代价是字符’0’的个数和’1’的个数,价值为 1。
dp[i][j]
代表使用 i 个’0’和 j 个’1’所能得到最大价值,根据每个字符串’0’和’1’的个数,进行状态转移即可。dp[i][j] = max{dp[i][j], dp[i - zeroes][j - ones]}
。
1 | public class LeetCode_00474 { |