1049. 最后一块石头的重量 II
class Solution {
public int lastStoneWeightII(int[] stones) {
int[] dp= new int[1501];
int sum=Arrays.stream(stones).sum();
int mid=sum/2;
for(int i=0;i<stones.length;i++){
for(int j=mid;j>=stones[i];j--){
dp[j]=Math.max(dp[j], dp[j-stones[i]]+stones[i]);
}
}
return sum-dp[mid]-dp[mid];
}
}
494. 目标和
class Solution {
public int findTargetSumWays(int[] nums, int target) {
int sum = Arrays.stream(nums).sum();
if(Math.abs(target)>sum) return 0;
if((target+sum)%2==1) return 0;
int find = (target+sum) / 2;
int[] dp= new int[find+1];
dp[0]=1;
for(int i=0;i<nums.length;i++){
for(int j=find;j>=nums[i];j--){
dp[j] += dp[j-nums[i]];
}
}
return dp[find];
}
}
474.一和零
class Solution {
public int findMaxForm(String[] strs, int m, int n) {
int[][] dp = new int[m+1][n+1];
for(String str : strs){
int zeroNum=0, oneNum=0;
for(char c : str.toCharArray()){
if(c=='0') zeroNum++;
else oneNum++;
}
for(int i=m;i>=zeroNum;i--){
for(int j=n;j>=oneNum;j--){
dp[i][j] = Math.max(dp[i][j], dp[i-zeroNum][j-oneNum] + 1);
}
}
}
return dp[m][n];
}
}