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

题目链接

相关推荐
a180079310801 分钟前
Java基础知识总结(三十二)--API--- java.lang.Runtime
java·开发语言
ufosuai55533 分钟前
Java网络编程
java·开发语言·网络
西岭千秋雪_39 分钟前
彻底理解JVM常量池
java·jvm
dashalen43 分钟前
LruCache实现
java·lru
Java 第一深情1 小时前
消息队列MQ面试题解,基础面试题
java·面试·消息队列·mq
凭君语未可1 小时前
豆包MarsCode:小C的类二进制拼图
java·算法
记得早睡~2 小时前
leetcode151-反转字符串中的单词
数据结构·算法·leetcode
Bran_Liu2 小时前
【LeetCode 刷题】二叉树-修改与构造
数据结构·python·算法·leetcode
南宫生2 小时前
力扣动态规划-16【算法学习day.110】
算法·leetcode·动态规划
洛溪之恋2 小时前
从零开始学习安时积分法(STM32实现程序)
算法