class Solution {
public int findMaxForm(String[] strs, int m, int n) {
if (strs.length == 0) return 0;
int[][] dp =new int[m+1][n+1];//strs 数组里的元素就是物品,m和n是背包,二维的背包
// 遍历物品,字符串中有各个字符
for(String s :strs) {
int zero = 0,one = 0;//统计字符串中各个字符的01数量。
for(char c:s.toCharArray()) {
if (c == '0') ++zero;
else ++one;
}
// 两个都是>=,因为这两个都是遍历背包容量
for (int i = m; i >=zero; i--) {
for (int j = n; j >= one; j--) {
dp[i][j] = Math.max(dp[i][j], 1+dp[i-zero][j-one]);
}
}
}
return dp[m][n];
}
}
10-16
551
10-13
781