class Solution {
public int findTargetSumWays(int[] nums, int target) {
int sum = 0;
for(int i = 0;i<nums.length;i++) sum+=nums[i];
if(Math.abs(target) > sum) return 0;
if((target + sum) % 2 ==1) return 0;
int bagsize = (target+ sum) /2;
int[] dp = new int[bagsize + 1];
dp[0] = 1;
//先遍历物品,在遍历背包
//每个物品只能用一次,0-1背包,所以倒叙遍历背包
for(int i = 0 ; i < nums.length; i++){
for(int j = bagsize ; j >= nums[i] ; j--){
dp[j] += dp[j-nums[i]];
}
}
return dp[bagsize];
}
}
class Solution {
public int findMaxForm(String[] strs, int m, int n) {
int[][] dp = new int[m+1][n+1];
//统计01个数
for(String str :strs){
int x=0;
int y=0;
for(char ch : str.toCharArray() ){
if(ch == '0'){
x++;
}
if(ch == '1') {
y++;
}
}
for(int i = m ; i >= x ; i--){
for(int j = n ; j >= y ; j--){
dp[i][j] = Math.max(dp[i][j],dp[i-x][j-y] +1);
}
}
}
return dp[m][n];
}
}