每个字符串看成一个物品,两个属性是0和1的个数,转换为01背包。
code
class Solution {
public:
int w[605][2];
int dp[105][105];
int v[605]={1};
int findMaxForm(vector<string>& strs, int m, int n) {
int len=strs.size();
for(int i=0;i<len;i++){
int siz=strs[i].size();
for(int j=0;j<siz;j++){
w[i][strs[i][j]-'0']++;
}
}
int ans=0;
for(int k=0;k<len;k++){
for(int i=m;i>=0;i--){
for(int j=n;j>=0;j--){
if(i>=w[k][0] && j>=w[k][1]){
dp[i][j]=max(dp[i][j],dp[i-w[k][0]][j-w[k][1]]+1);
ans=max(ans,dp[i][j]);
}
}
}
}
return ans;
}
};