Day45 动态规划part05

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

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

LC494目标和(未掌握)

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

LC474一和零(未掌握)

  1. 本质上其实还是01背包问题,但是不同的是背包被分为了两个容量,一个是1容量m另外一个是0容量n
  2. strs中的每一个string就是一个货物
  3. dp[i][j]表示抓满i个1容量和j个0容量的背包最大的子集个数是dp[i][j]
  4. 递推公式:dp[i][j] = dp[i-oneNums][j-zeroNums]+1;
  5. 需要判断一下每个货物中0和1的个数
相关推荐
hsling松子4 小时前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
dengqingrui1235 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
C++忠实粉丝5 小时前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O5 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
CV-King6 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
代码雕刻家6 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
雨中rain6 小时前
算法 | 位运算(哈希思想)
算法
Kalika0-08 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
sp_fyf_20248 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
我是哈哈hh10 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝