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

题目链接

相关推荐
多米Domi01119 分钟前
0x3f 第49天 面向实习的八股背诵第六天 过了一遍JVM的知识点,看了相关视频讲解JVM内存,垃圾清理,买了plus,稍微看了点确定一下方向
jvm·数据结构·python·算法·leetcode
饺子大魔王的男人19 分钟前
Remote JVM Debug+cpolar 让 Java 远程调试超丝滑
java·开发语言·jvm
Hx_Ma168 小时前
SpringMVC框架提供的转发和重定向
java·开发语言·servlet
期待のcode8 小时前
原子操作类LongAdder
java·开发语言
舟舟亢亢9 小时前
Java集合笔记总结
java·笔记
A_nanda9 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
小酒窝.9 小时前
【多线程】多线程打印ABC
java
乡野码圣10 小时前
【RK3588 Android12】RCU机制
java·jvm·数据库
JAVA+C语言10 小时前
如何优化 Java 多主机通信的性能?
java·开发语言·php
编程彩机11 小时前
互联网大厂Java面试:从分布式架构到大数据场景解析
java·大数据·微服务·spark·kafka·分布式事务·分布式架构