问题描述
解题报告
背包问题。
实现代码
*我的代码
class Solution{
public:
int findMaxForm(vector<string>&strs,int m,int n){
int size=strs.size();
vector<vector<vector<int>>>dp(size+1,vector<vector<int>>(m+1,vector<int>(n+1,0)));
vector<int>ones;
vector<int>zeros;
for(string str:strs){
int zero=0,one=0;
for(char c:str){
if(c=='1'){
one++;
}
else{
zero++;
}
}
ones.push_back(one);
zeros.push_back(zero);
}
for(int k=size-1;k>=0;k--){
for(int i=0;i<=m;i++){
for(int j=0;j<=n;j++){
if(i<zeros[k]||j<ones[k]){
dp[k][i][j]=dp[k+1][i][j];
}
else{
dp[k][i][j]=max(dp[k+1][i][j],dp[k+1][i-zeros[k]][j-ones[k]]+1);
}
}
}
}
return dp[0][m][n];
}
};
- 别人的代码
class Solution {
public:
int findMaxForm(vector<string>& strs, int m, int n) {
vector<vector<int>> dp(m+1,vector<int>(n+1,0));
for(string str:strs){
int zero=0,one=0;
for(char c:str)
if(c=='1')
one++;
else
zero++;
for(int i=m;i>=zero;i--){
for(int j=n;j>=one;j--){
dp[i][j]=max(dp[i][j],dp[i-zero][j-one]+1);
}
}
}
return dp[m][n];
}
};