题目:
代码(首刷看解析 2024年2月26日)
class Solution {
public:// 二维 0 1背包int findMaxForm(vector<string>& strs, int m, int n) {// 1 二维 [i]表示 0 的个数,上限m; [j]表示 1 的个数,上限nvector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));// 2 初始化 TODO:dp[0][0] = 0;// 3 遍历 TODO:倒序遍历[i][j]for (auto str : strs) {int zeroNum = 0;int oneNum = 0;for (int it : str) {if (it == '0') zeroNum++;else if(it == '1')oneNum++;}cout<<"zero:"<<zeroNum<<" one:"<<oneNum<<endl;for (int i = m; i >= zeroNum; --i) {for (int j = n; j >= oneNum; --j) {dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);cout<<"dp["<<i<<"]"<<"["<<j<<"]:"<<dp[i][j]<<" ";}cout<<endl;}cout<<"___________________________________"<<endl;}return dp[m][n];// 4 递推公式 dp[i][j] = max(dp[i - zeroNum][j - oneNum], // dp[i - zeroNum][j - oneNum] + 1);}
};