提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、力扣1049.最后一块石头的重量II
class Solution {
public int lastStoneWeightII(int[] stones) {
int sum = 0;
for(int i : stones){
sum += i;
}
int 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]);
}
}
return sum - 2 * dp[target];
}
}
二、力扣494.目标和
class Solution {
public int findTargetSumWays(int[] nums, int target) {
int sum = 0;
for(int i : nums){
sum += i;
}
if(target < 0 && sum < -target)return 0;
if((target + sum)%2 != 0)return 0;
int size = (target + sum)/2;
if(size < 0)size = -size;
int[] dq = new int[size + 1];
dq[0] = 1;
for(int i = 0; i < nums.length; i ++){
for(int j = size; j >= nums[i]; j --){
dq[j] += dq[j - nums[i]];
}
}
return dq[size];
}
}
三、力扣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;
int oneNum = 0;
for(char ch : str.toCharArray()){
if(ch == '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];
}
}