DP查缺补漏之完全背包优化原理
1|0DP查缺补漏之完全背包优化原理
先复习一下基本知识
-
状态假设
DP[I][J]
为前 个物品,容量小于 时的最优解(最大价值)
-
状态转移
DP[I][J] = max(DP[I - 1][J], DP[I - 1][J - k*V[I]] + k*W[I])
- 对于第
个物品,两种可能- 装入背包(装入
个)
- 装入背包(装入
- 对于第
- 不装入背包
- 则状态应通过前
个物品,容量小于 时的最优解直接进行转移
- 则状态应通过前
-
代码处理
-
优化思路(时间和空间)
-
时间复杂度
-
从状态方程分析
DP[I][J] = max(DP[I - 1][J], DP[I-1][J-V] + W, DP[I-1][J-2V] + 2W, ... , DP[I-1][J-NV] + NW)
DP[I][J-V] = MAX( DP[I-1][J-V], DP[I-1][J-2V] + 1W, ... , DP[I-1][J-NV] + (N-1)W)
- 每一项都比
DP[I][J]
小一个W,最大值即DP[I][J-V]
与DP[I][J]
相差一个W。
- 每一项都比
DP[I][J] = DP[I,J-V] + W
-
用新转移方程实现
-
-
注意右边那项是
DP[i][j - v[i]] + w[i]
,这与01背包不同。
-
-
-
空间复杂度
-
从状态方程分析
DP[i][j] = max(DP[i][j], DP[i][j - v[i]] + w[i])
- 仍然可以优化空间,但是与01不同的是这个方程并非滚动,本次的大答案只能由本次的小答案推出,所以第二层for应从小到大枚举
-
代码实现
-
-
__EOF__

本文作者:Kdlyh
本文链接:https://www.cnblogs.com/kdlyh/p/17803165.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/kdlyh/p/17803165.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下