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

让石头分成重量相同的两堆(尽可能相同),相撞之后剩下的石头就是最小的。进一步转化成容量为重量总喝一半的背包最多可以装多少质量的石头。这样就转化成了背包问题。

最后求结果时,我们所最多能装的时dp[target],那另一半石头就是sum-dp[target],我们所求的就是(sum-dp[target])-dp[target],也就是sum-dp[target] * 2。

csharp 复制代码
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;
    }
}

题目链接

相关推荐
旖-旎1 小时前
深搜练习(单词搜索)(12)
c++·算法·深度优先·力扣
2401_873479401 小时前
运营活动被薅羊毛怎么防?用IP查询+设备指纹联动封堵漏洞
java·网络·tcp/ip·github
ShiJiuD6668889992 小时前
大事件板块一
java
摇滚侠2 小时前
@Autowired 和 @Resource 的区别
java·开发语言
SeaTunnel2 小时前
(八)收官篇 | 数据平台最后一公里:数据集成开发设计与上线治理实战
java·大数据·开发语言·白鲸开源
企客宝CRM2 小时前
2026年中小企业CRM选型指南:企客宝CRM处于什么位置?
android·算法·企业微信·rxjava·crm
橙淮2 小时前
二叉树核心概念与Java实现详解
数据结构·算法
吴声子夜歌3 小时前
Java——线程的基本协作机制
java·线程协作
米罗篮3 小时前
DSU并查集 & 拓展欧几里得-逆元
c++·经验分享·笔记·算法·青少年编程
橙淮3 小时前
双指针法:高效算法解题的利器
算法