一、题目
二、代码
class Solution
{
public:
vector<int> count(string pro_str)
{
vector<int> return_vector(2,0);
int i;
for(i=0;i<pro_str.size();i++)
{
if(pro_str[i]=='0') return_vector[0]++;
if(pro_str[i]=='1') return_vector[1]++;
}
// std::cout<<"return_vector[0] "<<return_vector[0]<<std::endl;
// std::cout<<"return_vector[1] "<<return_vector[1]<<std::endl;
return return_vector;
}
int findMaxForm(vector<string>& strs, int m, int n)
{
int i,j,k;
int return_int=0;
vector<vector<int>> dp(n+1, vector<int>(m+1, 0)); //这样就创建了长度为m+1 高度为n+1的全0二维向量
vector<int> cout_vector;
//cout_vector=count(strs[0]);
// std::cout<<"cout_vector[0] "<<cout_vector[0]<<std::endl;
// std::cout<<"cout_vector[1] "<<cout_vector[1]<<std::endl;
for(k=0;k<strs.size();k++)
{
//01背包 行表示0的数量 列表示1的数量
//
cout_vector=count(strs[k]);
for(i=m;i>=cout_vector[0];i--)
{
for(j=n;j>=cout_vector[1];j--)
{
dp[j][i]=max(dp[j][i],dp[j-cout_vector[1]][i-cout_vector[0]]+1);
}
}
}
return_int=dp[n][m];
return return_int;
}
};