题意大概为给定指定数目的0和1,问最多可以组成多少个给定数组中的数。设数组d[i][j]表示i个0,j个1最多可以组成多少个,递推关系式为dp[j][k]=max(dp[j-zero(strs[i])][k-one(strs[i])]+1,dp[j][k]),分为是否选取当前元素,代码入下:
class Solution {
public:
int zero(string s)
{
int t=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='0') t++;
}
return t;
}
int one(string s)
{
int t=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='1') t++;
}
return t;
}
int findMaxForm(vector<string>& strs, int m, int n) {
int dp[m+1][n+1];
for(int i=0;i<m+1;i++)
{
for(int j=0;j<n+1;j++) dp[i][j]=0;
}
for(int i=0;i<strs.size();i++)
{
for(int j=m;j>=zero(strs[i]);j--)
{
for(int k=n;k>=one(strs[i]);k--)
{
dp[j][k]=max(dp[j-zero(strs[i])][k-one(strs[i])]+1,dp[j][k]);
}
}
}
return dp[m][n];
}
};