class Solution {
public int lastStoneWeightII(int[] stones) {
int sum = 0;
int target = 0;
for(int num : stones){
sum += num;
}
target = sum/2;
int[] dp = new int[target+1];
for(int i = 0; i < stones.length;i++){
for(int j = target; j >= stones[i];j--){
dp[j] = Math.max(dp[j],dp[j - stones[i]] + stones[i]);
}
}
int a = dp[target];
int b = sum - a;
int diff = Math.abs(a-b);
return diff;
}
}
494. 目标和
class Solution {
public int findTargetSumWays(int[] nums, int target) {
int sum = 0;
for(int num : nums){
sum += num;
}
int left = (target + sum)/2;
int[] dp = new int[left+1];
dp[0] = 1;
for(int i = 0; i < nums.length;i++){
for(int j = left; j >= nums[i];j--){
dp[j] += dp[j-nums[i]];
}
}
return dp[left];
}
}
474. 1和0
class Solution {
public int findMaxForm(String[] strs, int m, int n) {
int[][] dp = new int[m+1][n+1];
for(String str : strs){
int x = 0;
int y = 0;
for(char c : str.toCharArray()){
if(c == '0')x++;
else 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];
}
}