- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
f[i,j]表示在前
f[i,j]表示在前i 件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。
Pi 表示第i 件物品的价值。
决策:为了背包中物品总价值最大化,第 i 件物品应该放入背包中吗 ?
题目描述:
有编号分别为 a,b,c,d,e 的五件物品,它们的重量分别是 2,2,6,5,4,它们的价值分别是 6,3,5,4,6,现在给你个承重为10 的背包,如何让背包里装入的物品具有最大的价值总和?
01 背包问题,是用来介绍动态规划算法最经典的例子,网上关于 01 背包问题的讲解
也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01 背包问题讲解透彻。
01 背包的状态转换方程f[i,j] = Max{ f[i-1,j-Wi]+Pi( j
01 背包的状态转换方程
f[i,j] = Max{ f[i-1,j-Wi]+Pi( j =
Wi ),
f[i-1,j] }
name
weight
value
1
2
3
4
5
6
7
8
9
10
a
2
6
0
6
6
9
9
12
12
15
15
15
b
2
3
0
3
3
6
6
9
9
9
10
11
c
6
5
0
0
0
6
6
6
6
6
10
11
d
5
4
0
0
0
6
6
6
6
6
10
10
e
4
6
0
0
0
6
6
6
6
6
6
6
只要你能通过找规律手工填写出上面这张表就算理解了
只要你能通过找规律手工填写出上面这张表就算理解了01 背包的动态规划算法。首先要明确这张表是至底向上,从左到右生成的。
为了叙述方便,用e2 单元格表示e 行 2 列的单元格,这个单元格的意义是用来表示只有物品e 时,有个承重为2 的背包,那么这个背包的最大价值是0,因为e 物品的重量是 4,背包装不了。
对于 d2 单元格,表示只有物品e,d 时,承重为 2 的背包,所能装入的最大价值,仍然是 0,因为物品e,d 都不是这个背包能装的。
同理,c2=0,b2=3,a2=6。
对于承重为 8 的背包,a8=15,是怎么得出的呢? 根据 01 背包的状态转换方程,需要考察两个值,
一个是f[i-1,j],对于这个例子来说就是b8 的值 9,另一个是f[i-1,j-Wi]+Pi; 在这里,
f[i-1,j]表示我有一个承重为 8 的背包,当只有物品 b,c,d,e 四件可选时,这个背包能装入的最大价值
f[i-1,j-Wi]表示我有一个承重为 6 的背包(等于当前背包承重减去物品a 的重量),当只有物品b,c,d,e 四件可选时,这个背包能装入的最大价值
f[i-1,j-Wi]就是指单元格b6,值为 9,Pi 指的是a 物品的价值,即 6
由于f[i-1,j-Wi]+Pi = 9 + 6 = 15 大于 f[i-1,j] = 9,所以物品a 应该放入承重为 8 的背包
以下是actionscript3的代码
public function
get01PackageAnswer(bagItems:Array,bagSize:int):Array
{
var bagMatrix:Array=[]; var i:int;
var item:PackageItem; for(i=0;ibagItems.length;i++)
{
bagMatrix[i] = [0];
}
for(i=1;i=bagSize;i++)
{
for(var j:int=0;jbagItems.length;j++)
{
item = bagItems[j] as
PackageItem;
if(item.weight i)
{
//i 背包转不下 item if(j==0)
{
bagMatrix[j][i] = 0;
}
else
{
bagMatrix[j][i]=bagMatrix[j-1][i];
}
else
{
}
//将item 装入背包后的
价值总和
var itemInBag:int; if(j==0)
{
bagMatrix[j][i] = item.value;
}
else
continue;
PackageItem 类
PackageItem 类
public class PackageItem
{
function
PackageItem(name:String,weight:int,value:int)
{
itemInBag
=
bagMatrix[j-1][i-item.weight]+item.value;
}
bagMatrix[j][i] = (bagMatrix[j-1][i] itemInBag ? bagMatrix[j-1][i] : itemInBag)
}
}
}
//find ans
您可能关注的文档
最近下载
- 中国临床肿瘤学会(CSCO)肝癌破裂出血诊疗指南2025.docx
- 2025年材料的现代分析方法 测试题及答案.pdf VIP
- 企业标识的组成型式及确定方法、电力变压器损耗水平代号的确定.pdf VIP
- 2025年锂离子电池辅材报告-2025-03.pdf VIP
- 外研版八年级英语教学总结.docx VIP
- 工程赶工措施方案.doc VIP
- 四川省成都市石室中学2024-2025学年七年级上学期期末抽样监测数学试题(含答案).docx VIP
- TCWEA002-2025 旅游策划师职业能力水平评价标准.pdf VIP
- 脱口秀实战指南(如何从零开始写段子).docx VIP
- 深度解析(2026)GBT 11893-1989《水质 总磷的测定 钼酸铵分光光度法》:经典方法的传承、解构与面向未来的应用演进.pptx VIP
原创力文档


文档评论(0)