分析
背包问题,但是这里的target有两个,所以最开始的是三维,降为二维的情况下,原本的二三维都需要逆序
代码
class Solution {
/*public int findMaxForm(String[] strs, int m, int n) {
int[][][] dp=new int[strs.length+1][m+1][n+1];
dp[0][0][0]=0;
for(int q=0;q<strs.length;q++)
{
int[] count=count0And1(strs[q]);
for(int i=0;i<=m;i++)
for(int j=0;j<=n;j++)
{
dp[q+1][i][j]=dp[q][i][j];
if(i>=count[0]&&j>=count[1])
{
dp[q+1][i][j]=Math.max(dp[q+1][i][j],dp[q][i-count[0]][j-count[1]]+1);
}
}
}
return dp[strs.length][m][n];
}
public int[] count0And1(String str)
{
int[] res=new int[2];
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='0')
res[0]++;
else res[1]++;
}
return res;
}*/
public int findMaxForm(String[] strs, int m, int n) {
int[][] dp=new int[m+1][n+1];
dp[0][0]=0;
for(String str:strs)
{
int[] count=count0And1(str);
for(int i=m;i>=0;i--)
for(int j=n;j>=0;j--)
{
dp[i][j]=dp[i][j];
if(i>=count[0]&&j>=count[1])
{
dp[i][j]=Math.max(dp[i][j],dp[i-count[0]][j-count[1]]+1);
}
}
}
return dp[m][n];
}
public int[] count0And1(String str)
{
int[] res=new int[2];
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='0')
res[0]++;
else res[1]++;
}
return res;
}
}
京公网安备 11010502036488号