当前位置: 首页 > article >正文

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

题目链接


http://www.kler.cn/a/526118.html

相关文章:

  • 鸿蒙开发黑科技“stack叠层”替代customdialog
  • 快速提升网站收录:避免常见SEO误区
  • 如何监控ubuntu系统某个程序的运行状态,如果程序出现异常,对其自动重启。
  • 百度热力图数据获取,原理,处理及论文应用5
  • 神经网络和深度学习
  • 深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
  • Windows程序设计8:获取文件大小的两种方式
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(一)
  • Oracle Primavera P6 最新版 v24.12 更新 2/2
  • 数据结构 前缀中缀后缀
  • 毕业设计--具有车流量检测功能的智能交通灯设计
  • 【二叉树的深搜】二叉树剪枝
  • Ubuntu安装VMware17
  • C++ 堆栈分配的区别
  • 【Block总结】PConv,部分卷积|即插即用
  • 【数据结构】最有效的实现栈和队列的方式(CC++语言版)
  • 计算机组成原理学习笔记
  • 组合模式 - 组合模式的实现
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)
  • Sqoop源码修改:增加落地HDFS文件数与MapTask数量一致性检查
  • [Java]泛型(二)泛型方法
  • AJAX综合案例——图书管理
  • 01-时间与管理
  • DeepSeek-R1 论文解读:强化学习如何 “炼” 出超强推理模型?
  • 使用 Context API 管理临时状态,避免 Redux/Zustand 的持久化陷阱
  • Web-3.0学习路线