欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)

力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)

2025/2/2 20:35:06 来源:https://blog.csdn.net/weixin_61026052/article/details/145401584  浏览:    关键词:力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)

让石头分成重量相同的两堆(尽可能相同),相撞之后剩下的石头就是最小的。进一步转化成容量为重量总喝一半的背包最多可以装多少质量的石头。这样就转化成了背包问题。
最后求结果时,我们所最多能装的时dp[target],那另一半石头就是sum-dp[target],我们所求的就是(sum-dp[target])-dp[target],也就是sum-dp[target] * 2。

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<dp.length;i++){dp[i] = 0;}for(int i=0;i<stones.length;i++){for(int j=target;j>=stones[i];j--){dp[j] = Math.max(stones[i]+dp[j-stones[i]],dp[j]);}}return sum-dp[target] * 2;}
}

题目链接

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com