力扣【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;
    }
}

题目链接

相关推荐
laocooon5238578862 分钟前
一个C项目实现框架
c语言·算法
嘟嘟w9 分钟前
Servlet的生命周期
java
张较瘦_21 分钟前
SpringBoot3 | SpringBoot中Entity、DTO、VO的通俗理解与实战
java·spring boot·后端
may_一一42 分钟前
docker安装的redis状态一直是restarting
java·redis·docker
zhangyifang_00944 分钟前
Spring中的SPI机制
java·spring
c#上位机1 小时前
halcon图像增强——图像取反
图像处理·算法·c#·halcon
zheyutao1 小时前
割点和桥
算法·图论
han_hanker1 小时前
这里使用 extends HashMap<String, Object> 和 类本身定义变量的优缺点
java·开发语言
@小码农1 小时前
2025年北京海淀区中小学生信息学竞赛第二赛段C++真题
开发语言·数据结构·c++·算法
careathers1 小时前
【JavaSE语法】面向对象初步认识
java·面向对象