题目分析
1. 这题是有两个背包的背包问题变形
2. 直接在原来的背包问题上增加一维,就可以套用原有的状态转移方程解答。
题目代码
class Solution {
public:
int findMaxForm(vector<string>& strs, int m, int n) {
vector<vector<int>> f(m + 1, vector<int>(n + 1, 0));
for (int i = 0; i < strs.size(); i++) {
int z = 0;
int o = 0;
for (auto x = strs[i].cbegin(); x != strs[i].cend(); x++)
if (*x == '0') z++;
else o++;
for (int j = m; j >= z; j--)
for (int k = n; k >= o; k--)
f[j][k] = f[j][k] >= f[j - z][k - o] + 1 ? f[j][k] : f[j - z][k - o] + 1;
}
return f[m][n];
}
};