步骤一、确定状态:

确定dp数组及含义

dp[i]表示的是: 背包的容量为i的情况下,所能得到物品的最大值 这里的物品容量和物品价值都是石头的重量

步骤二、推断状态方程:

dp[j] = max(dp[j], dp[j- stones[i]]+stones[i])

步骤三、规定初始条件:

初始条件:

全局初始化, 由于都是正整数,所以可以都初始化0, 而dp数组初始化的话,dp[0] = 0

步骤四、计算顺序:

这个和0-1背包的一致,正向遍历石头, 而反向遍历容量

class Solution:def lastStoneWeightII(self, stones: List[int]) -> int:bagweight = sum(stones) // 2 # 确定targetdp = [0] * (bagweight + 1)dp[0] = 0 # 初始化for i in range(len(stones)): # 遍历石头for j in range(bagweight, stones[i]-1, -1): # 逆序遍历背包容量dp[j] = max(dp[j], dp[j- stones[i]] + stones[i])return (sum(stones) - dp[bagweight]) - dp[bagweight]

95. Leetcode 1049. 最后一块石头的重量 II (动态规划-背包问题)相关推荐

  1. LeetCode 1049. 最后一块石头的重量 II

    1049. 最后一块石头的重量 II 无论按照何种顺序粉碎石头,最后一块石头的重量总是可以表示成 可以这样理解,将所有的石头分为两堆,ki=1的石头是一堆,ki=-1的石头是另一堆,我们的目标就是求上 ...

  2. 153、【动态规划】leetcode ——1049. 最后一块石头的重量 II:滚动数组(C++版本)

    题目描述 原题链接:1049. 最后一块石头的重量 II 解题思路 本题要找的是最小重量,我们可以将石头划分成两个集合,当两个集合的重量越接近时,相减后,可达到的装量就会是最小,此时本题的思路其实就类 ...

  3. 代码随想录刷题|LeetCode 1049. 最后一块石头的重量II 494. 目标和 474.一和零

    目录 1049. 最后一块石头的重量 II 思路 最后一块石头的重量|| 494. 目标和 思路 0.求什么 1.确定dp数组的含义 2.递推公式 3.初始化dp数组 4.遍历顺序 目标和 474.一 ...

  4. LeetCode 1049. 最后一块石头的重量 II(DP)

    1. 题目 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎. 假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x ...

  5. 2022-2-19 Leetcode 1049.最后一块石头的重量II

    例二分析:26+21-40 = 7 33-31 = 2 7-2 = 5 相当于小块石头集合之后一起去砸大石头. 这道题和最后一块石头的重量I 有什么不同? 例子更复杂了.(虽然不知道复杂在哪里) 这道 ...

  6. LeetCode 1049. 最后一块石头的重量 II 做题小结

    题目 有一堆石头,每块石头的重量都是正整数.每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下:如果 x == y,那 ...

  7. leetcode - 1049. 最后一块石头的重量 II

    这个问题可以转化为0-1背包问题,背包的大小为所有石头的重量之和的一半,意思就是找到要求的石头组合重量之和最接近所有石头重量的一半.具体的C++代码如下: class Solution { publi ...

  8. LeetCode:1049.最后一块石头的重量II 494.目标和 474.一和零

    1049.最后一块石头的重量II 题目 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的 ...

  9. LeetCode刷题day43|1049. 最后一块石头的重量 II、 494. 目标和、474.一和零

    文章目录 一.1049. 最后一块石头的重量 II 二.494. 目标和 三.474.一和零 一.1049. 最后一块石头的重量 II 这道题其实就与"分割子集"一样,就是先将总和 ...

最新文章

  1. firedac连接mysql,FireDAC连接数据库
  2. 发动机的工作原理,你知道吗?
  3. mysql统计同一字段重复的个数
  4. 编译linux tq2440,QT4.8.2在TQ2440开发板上的移植(一)--编译和安装
  5. AI如何驱动软件开发?华为云DevCloud 权威专家邀你探讨
  6. css案例学习之并集选择器
  7. oracle11 rman全备,Oracle 11g非归档模式下mount状态RMAN究竟能不能进行全备?
  8. JavaScript的面向对象原理之原型链
  9. c程序语言符号的作用,c语言宏定义中的#,##,#@及\符号的作用
  10. Humanoid(人形)动画概述——动画(Mecanim)系统学习
  11. 怎样查看谁发的qq坦白说
  12. 那些年学过的古诗谚语名句俗语
  13. Vue实现拖拽拼图滑块验证
  14. 纸壳cms支持php坏境吗,如何参与纸壳CMS开发以及贡献代码
  15. 停车场停车怎么找车?怎样查车停车什么停车场?
  16. C++试卷(程序设计题)
  17. JavaScript 求平均数的方法(实参个数不确定)
  18. 关于电信基站nid,sid,bid
  19. python剪刀石头布小游戏源码下载_Python Tkinter实现剪刀石头布小游戏
  20. 什么是SaaS,SaaS有哪些优缺点?

热门文章

  1. 图片加载之SDWebImage(上)
  2. 重裝系統,磁盤消失解決方法
  3. Photoshop之学习笔记(2) - 常用快捷键
  4. postman-持续更新
  5. 利用Gearman,搭建异步分布式计算平台
  6. python找出第二大值,Python程序在Dictionary中查找第二个最大值
  7. 扫描仪图标无法显示计算机,win7“我的电脑”中不显示扫描仪和摄像头的原因和解决方法...
  8. java.lang.String_自己写的java.lang.String可以让jvm加载到吗?
  9. opencv计算两数组的乘积_leetcode1464_go_数组中两元素的最大乘积
  10. 复杂查询练习_《从零学会SQL:简单查询》第二关 简单查询