1049 最后一块石头的重量 II

Posted HardyDragon_CC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1049 最后一块石头的重量 II相关的知识,希望对你有一定的参考价值。

最后一块石头的重量 II

思路

  • 尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。
  • 所以背包的最大容量为 sum / 2;
  • 求出背包最大容量的重量后,用 sum 消去两堆石头得到剩下的石头重量。
class Solution 
    public int lastStoneWeightII(int[] stones) 
        int sum = 0;
        for(int num: stones) sum += num;
        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]);
    

总结

思路和 416 分割等和子集 类似

以上是关于1049 最后一块石头的重量 II的主要内容,如果未能解决你的问题,请参考以下文章

1049 最后一块石头的重量 II

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

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

LeetCode1049. 最后一块石头的重量 II / 牛客:毕业旅行问题(状压DP)

Leetcode刷题Python1049. 最后一块石头的重量 II

[M背包] lc1049. 最后一块石头的重量 II(01背包+知识理解+好题+思维)