Leetcode474之多条件的背包问题
Leetcode474-1和0
- 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。
- 输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3
- 输出:4
public int findMaxForm(String[] strs, int m, int n) {
int[][] dp=new int[m+1][n+1];//m个0 n个1时最大子集
for(int i=0;i<strs.length;i++){
int[] temp=getNum(strs[i]);
//倒序遍历
for (int j = m; j >= temp[0]; j--) {
for (int k = n; k >= temp[1]; k--) {
dp[j][k] = Math.max(dp[j][k], dp[j - temp[0]][k - temp[1]] + 1);
}
}
}
return dp[m][n];
}
public int[] getNum(String str){
int[] res=new int[2];
for(int i=0;i<str.length();i++){
if(str.charAt(i)=='0'){
res[0]++;
}
if(str.charAt(i)=='1'){
res[1]++;
}
}
return res;
}

浙公网安备 33010602011771号