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

【动态规划】【01背包】Leetcode 1049. 最后一块石头的重量 II

【动态规划】【01背包】Leetcode 1049. 最后一块石头的重量 II

    • 解法

---------------🎈🎈题目链接🎈🎈-------------------
在这里插入图片描述

解法

😒: 我的代码实现============>

动规五部曲

✒️确定dp数组以及下标的含义

dp[j]表示容量为j的背包,最多可以背最大重量为dp[j]。

✒️确定递推公式

01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
本题则是——dp[j] = max(dp[j], dp[j - stones[i]] + stones[i])

✒️dp数组初始化

初始为0即可

✒️确定遍历顺序

正序遍历物品,倒序遍历背包

最后dp[target]里是容量为target的背包所能背的最大重量。
⭐️那么求dp[sum/2] ,即dp[target]即可!
那么分成两堆石头,一堆石头的总重量是dp[target],另一堆就是sum - dp[target]。

时间复杂度O(N)
空间复杂度O(N)

📘代码

class Solution {public int lastStoneWeightII(int[] stones) {// 得到总的重量int sum = 0;for(int stone:stones){sum += stone;}// 希望尽可能凑出离total/2近的两组石头  =》 一组离total/2近, 那另一组也一定离total/2近// dp[j] : 装满容量为j的背包 能装下的最大重量为dp[j] int total = sum/2;int[] dp = new int[total+1];for(int i = 0 ; i < stones.length; i++){ // 正序遍历物品for(int j = total; j>=stones[i]; j--){ // 倒序遍历背包dp[j] = Math.max(dp[j] , dp[j-stones[i]]+stones[i]);}}for(int j = 0; j <= total; j++){ // 倒叙遍历背包System.out.println(dp[j]);}return Math.abs(dp[total] - (sum-dp[total]));}
}   
http://www.lryc.cn/news/337212.html

相关文章:

  • 2023 年上海市大学生程序设计竞赛 - 四月赛
  • 别让这6个UI设计雷区毁了你的APP!
  • 继承【C/C++复习版】
  • 题目 2694: 蓝桥杯2022年第十三届决赛真题-最大数字【暴力解法】
  • 【C语言】- C语言字符串函数详解
  • 如何实现小程序滑动删除组件+全选批量删除组件
  • 基于SSM+Jsp+Mysql的农产品供销服务系统
  • ​​​​网络编程学习探索系列之——广播原理剖析
  • 小程序开发SSL证书下载和安装
  • 医疗图像分割 | 基于Pyramid-Vision-Transformer算法实现医疗息肉分割
  • 蓝桥杯 每日2题 day5
  • [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶和对象操作完全指南
  • 循环单链表算法库
  • WPS二次开发系列:Gradle版本、AGP插件与Java版本的对应关系
  • 绿联 安装MariaDB数据库用于Seatable服务
  • Spark, Storm, Flink简介
  • 【攻防世界】mfw(.git文件泄露)
  • 递归神经网络(Recursive Neural Networks)
  • 【leetcode面试经典150题】29.三数之和(C++)
  • ThinkPHP审计(1) 不安全的SQL注入PHP反序列化链子phar利用简单的CMS审计实例
  • Centos中一些有趣的命令
  • elementUI2
  • Python 爬虫基础——http请求和http响应
  • 【Hadoop】Hive导入导出数据指南
  • Mybatis 执行批量插入
  • vivado 使用基本触发器模式
  • Chrome 浏览器无法保存或自动填充密码
  • C语言面试指针辨析
  • YOLOV5 分类:利用yolov5进行图像分类
  • Golang | Leetcode Golang题解之第16题最接近的三数之和