Day45 动态规划part05

LC1049最后一块石头重量II(未掌握)

  1. 未掌握分析:其实本题跟LC416分割等和子集类似,本质上题目的要求是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,也就是01背包问题
  2. weight和value都是stones数组,题目可以看成是target=sum/2,即求背包容量是target所装石头的value是多少。
  3. target = sum / 2 因为是向下取整,所以sum - dptarget 一定是大于等于dptarget的。
  4. 代码

LC494目标和(未掌握)

  1. 未能够将题意转换为01背包问题
  2. 其实题目也就是将数组分为两堆,+一堆,-一堆,然后+的sum:left和-的sum:right,能够又left-right=target,但又因为left+right=sum,因此有left = (sum+target)/2
  3. 因此题目就转化为,装满容量为left的背包,有几种方法
  4. dpj 表示:填满j(包括j)这么大容积的包,有dpj种方法
  5. 递推公式:当来到了numsi有dpj += dpj-nums\[i]
  6. 初始化,dp0=1;
  7. 一些极端条件需要判断
    • 如果abs(target)>sum,一定是没有办法
    • 如果sum+target不能够整除2也是没有办法的
  8. 代码:

LC474一和零(未掌握)

  1. 本质上其实还是01背包问题,但是不同的是背包被分为了两个容量,一个是1容量m另外一个是0容量n
  2. strs中的每一个string就是一个货物
  3. dpij表示抓满i个1容量和j个0容量的背包最大的子集个数是dpij
  4. 递推公式:dpij = dpi-oneNumsj-zeroNums+1;
  5. 需要判断一下每个货物中0和1的个数
相关推荐
302wanger33 分钟前
蛋炒饭周刊 · 第 1 期(2026-09-07至2026-09-11)
算法
shehuiyuelaiyuehao1 小时前
算法43,外观数列,模拟算法+双指针
java·算法
alphaTao1 小时前
LeetCode 每日一题 2026/9/7-2026/9/13
算法·leetcode
kanhaoning1 小时前
Agent 记忆出现重复和矛盾怎么优化:我实测了6种去重和更新策略,找到了低成本维护记忆质量的方法
算法
hans汉斯1 小时前
【计算机科学与应用】层级评论上下文依赖识别数据集构建与研究——以小红书旅游评论数据为例
人工智能·算法·yolo·目标检测·cnn·旅游
码行山野赴时序归途2 小时前
顺序表(Sequential List)详解:从数组到 C 语言实现
c语言·开发语言·数据结构·算法
Lokey8682 小时前
自注意力机制与多头注意力机制
算法
linx2952 小时前
单元七 · 零基础路线图-第 1–3 周·变量、类型与字符串
c语言·开发语言·数据结构·c++·算法
Benny_Tang3 小时前
P7514 [省选联考 2021 A/B 卷] 卡牌游戏 题解
c++·算法