题目链接01背包
01背包的变形,原来的体积变成m和v,如果选择当前结点最大价值就是
Math.max(dp[j][k], dp[j - zeros][k - ones] + 1)
public class Solution {
private int[][] countNums(String[] strs) {
int[][] cnt = new int[101010][2];
for(int i=0;i<strs.length;i++){
for(int j=0;j<strs[i].length();j++) {
cnt[i][strs[i].charAt(j)-'0']++;
}
}
return cnt;
}
public int findMaxForm(String[] strs, int m, int n) {
int len = strs.length;
int[][] dp = new int[m + 1][n + 1];
int[][]cnt=countNums(strs);
dp[0][0]=0;
for (int i = 1; i <= len; i++) {
int zeros = cnt[i-1][0];
int ones = cnt[i-1][1];
for (int j = m; j>=zeros; j--) {
for (int k = n; k>=ones; k--) {
if (j >= zeros && k >= ones) {
dp[j][k] = Math.max(dp[j][k], dp[j - zeros][k - ones] + 1);
}
}
}
}
return dp[m][n];
}
}