动态规划 之背包问题(九讲)[通俗易懂]

动态规划 之背包问题(九讲)[通俗易懂]背包九讲参考:"AcWing题库"参考书目:"背包九讲"1、01背包问题题目描述:有N件物品和一个容量是V的背包。每件物品只能使用一次。第i

大家好,又见面了,我是你们的朋友全栈君。

背包九讲

动态规划 之背包问题(九讲)[通俗易懂]

参考:AcWing题库

参考书目:背包九讲

1、01背包问题

  • 题目描述:有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。第 i件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。

输出最大价值。

  • 思路:动态规划,对于每一件物品遍历背包容量,当背包可容纳值大于等于当前物品,与之前已放进去的物品所得价值进行对比,考虑把是否需要置换。

    • 状态转移方程:定义dp[i][j]:前i个物品,背包容量j下的最优解
      -(1)当前背包容量不够,为前\(i-1\)个物品最优解:j<w[i]时,有dp[i][j]=dp[i-1][j]
      -(2)当前背包容量够,判断选还是不选第i个物品:j>=w[i]时,选该物品->dp[i][j]=dp[i-1][j-w[i]]+v[i];不选该物品->dp[i][j]=dp[i-1][j]
## 伪代码:
# for i=1..N
#   for v=V..0
#       f[v]=max{f[v],f[v-c[i]]+w[i]}; 
  • \(\color{red}{代码实现-github}\)0-1背包

2、完全背包问题

  • 题目描述:有 N 种物品和一个容量是 V的背包,每种物品都有无限件可用。第 i种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。

  • 思路:

    • 思路1:最简单的想法,就是将完全背包转化为0-1背包问题,可以将第 i 种物品转化为W/w[i]件费用及价值均不变的物品,然后求解0-1背包问题。

    • 思路2:更高效的转化方法是第 i 种物品拆成费用为w[i]2k,价值为v[i]*2k的若干件物品,其中k满足w[i]2^k<=W。因为不管最优策略 选几件第 i 种物品,总可以表示成若干个 2^k 件物品的和(二进制思想)

    • 思路3(完全背包优化):若两件物品i、j满足c[i]<=c[j]且w[i]>=w[j],则将物品j去掉,不用考虑。c表物品重量,w表示对应物品价值。即将重量大且价值低的物品去掉。

    • 思路4(复杂度为O(VN)): 0-1背包问题中要按照 w=W..0 的逆序来循环,而完全背包必须按照从小到大的顺序。这是因为 要保证第 i 次循环中的状态 f[i][w]是由状态 f[i-1][w-w[i]]递推而来。换句话 说,这正是为了保证每件物品只选一次,保证在考虑“选入第 i 件物品”这件策 略时,依据的是一个绝无已经选入第 i 件物品的子结果 f[i-1][w-w[i]]。而现 在完全背包的特点恰是每种物品可选无限件,所以在考虑“加选一件第 i 种物 品”这种策略时,却正需要一个可能已选入第 i 种物品的子结果 f[i][w-w[i]], 所以就可以并且必须采用 w=0..W 的顺序循环。

## 伪代码:
# for i=1...N
#   for w=0...W
#       f[w] = max(f[w], f[w-cost]+weight)

3、多重背包问题

4、混合背包问题

5、二维费用的背包问题

6、分组背包问题

7、背包问题求方案数

8、求背包问题的方案

9、有依赖的背包问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154257.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 湖北用什么dns(lol服务器排名)

    转载自lmg360最终编辑37baby选择一个优秀快速的DNSServer,是上网的一大法宝。收集了一些湖北地区的主要DNS服务器,以作备忘。湖北电信:Name:wuhan.net.cnServedby:ns.hbwhptt.net.cn202.103.0.68ns1.wuhan.net.cn202.103.24.81ns1.hbwhptt.net.cn202.103.0.11…

  • html怎么让背景图片自适应屏幕大小_css背景图片拉伸填充

    html怎么让背景图片自适应屏幕大小_css背景图片拉伸填充html如何让背景图片充满全图,就是拉伸html语言背景图片拉伸代码:background-size:cover,可以使图片拉伸铺满背景。拓展资料背景(background)属性定义元素的背景效果元素的背景区包括前景之下直到边框边界的所有空间。因此,内容框与内边距都是元素背景的一部分。取值:repeat、no-repeat、repeat-x、repeat-y。repeat:默…

  • 【实用软件】局域网传输神器-LANDrop[通俗易懂]

    【实用软件】局域网传输神器-LANDrop[通俗易懂]软件介绍LANDrop是一款开源免费的支持跨平台的「局域网文件传输工具」 它的使用体验上可以媲美苹果生态的“隔空投送”功能! 能超级快速方便地将各种设备上的照片、视频、文档、文件发送到别的设备去软件功能LANDrop完全依靠局域网WIFI进行无线传输,速度极快 而且这款软件完全免费,并不限制任何平台 即便发送体积巨大的视频文件也完全没有问题,比起使用微信、QQ、网盘更加方便,速度更快,也不必担心图片/视频画质被压缩的烦恼下载地址下载地址https://url37.ctfile

  • fastJson注解@JSONField 的作用及其效果「建议收藏」

    【基于fastjson】如果你想让一个实体类里面的某些属性不参与转换成为json字符串,那么使用@JSONField就很舒服。废话不多说,我们看代码!!!!如:User实体类,我在age属性上面使用了这个注解@JSONFieldimportcom.alibaba.fastjson.annotation.JSONField;importjava.io.S…

  • Double转BigDecimal类型互转,保留俩位小数。

    Double转BigDecimal类型互转,保留俩位小数。Double转BigDecimalDoublechannelPrice=3.1452;BigDecimala=newBigDecimal(channelPrice);BigDecimalb=a.setScale(2,RoundingMode.HALF_UP);System.out.println(b);//b=3.14

  • 游戏建模,室内设计哪个更有前景?[通俗易懂]

    游戏建模,室内设计哪个更有前景?[通俗易懂]游戏建模职业分类及发展:进入游戏建模行业你可以选择不同的发展方向,比如:(1)手绘3D美术设计师:制作纯手绘风格游戏的所有3D物品如:角色、道具、建筑、山体;(2)次世代3D美术设计师:制作写实次世代风格游戏的所有3D物品,如:角色、道具、建筑。(3)关卡设计师:根据游戏风格要求,使用模型资源,搭建3D游戏世界(4)模型师:制作3D打印、影视动画中的所有模型。如:角色、道具、建筑、山体。次世代美术设计师做什么?次世代游戏:“次世代游戏”指代和同类游戏相比下更加先进的游戏,即“下一代游戏”。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号