leetcode 1049. 最后一块石头的重量 II

image

本题和分割等和子集基本一样,将stones分成两堆,两堆的和要尽可能的相同。

class Solution {
    public int lastStoneWeightII(int[] stones) {
        int sum=0;
        for(int s:stones) sum+=s;
        int num=solveKnapsack(stones,stones,sum/2);
        return (sum-num)-num;
    }

    int solveKnapsack(int[] weight,int[] value,int bagWeight){
        int n=weight.length;
        int[] dp=new int[bagWeight+1];
        for(int i=0;i<n;i++){
            for(int j=bagWeight;j>=weight[i];j--){
                dp[j]=Math.max(dp[j],dp[j-weight[i]]+value[i]);
            }
        }
        return dp[bagWeight];
    }
}
posted @ 2022-02-23 15:01  livingsu  阅读(25)  评论(0)    收藏  举报