动态规划-01背包问题_第1页
动态规划-01背包问题_第2页
动态规划-01背包问题_第3页
动态规划-01背包问题_第4页
动态规划-01背包问题_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、动态规划 01背包问题01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。01 背包的状态转换方程fi,j = Max fi-1,j-Wi+Pi( j = Wi ),fi-1,j fi,j表示在前i件物品中选择若干件放在承重为j的背包中,可以取得的最大价值。Pi表示第i件物品的价值。决策:为了背包中物品总价值最大化,第i件物品应该放入背包中吗?题目描述:有编号分别为a,b,c,d,e的五件物品,它们的重量分别是 2,2,6,5,4,它们的价值分别是 6,3,5,4,6 , 现在给你个承重为10

2、的背包,如何让背包里装入的物品具有最大的价值总和?n ameweightvalue12345678910a26066991212151515b23033669991011c65000666661011d54000666661010e460006666666只要你能通过找规律手工填写出上面这张表就算理解了01背包的动态规划算法。首先要明确这张表是至底向上,从左到右生成的。为了叙述方便,用e2单元格表示e行2列的单元格,这个单元格的意义是用来表示只有物品e时,有个承重为2的背包,那么这个背包的最大价值是0,因为e物品的重量是4,背包装不了。对于d2单元格,表示只有物品 e,d时,承重为2的背包,所

3、能装入的最大价值,仍然是 0,因为 物品e,d都不是这个背包能装的。同理,c2=0,b2=3,a2=6。对于承重为8的背包,a8=15,是怎么得出的呢?根据01背包的状态转换方程,需要考察两个值,一个是 fi-1,j,对于这个例子来说就是b8的值9,另一个是 fi-1,j-Wi+Pi ;在这里,fi-1,j表示我有一个承重为8的背包,当只有物品 b,c,d,e四件可选时,这个背包能装入的最大价值fi-1,j-Wi表示我有一个承重为6的背包(等于当前背包承重减去物品a的重量),当只有物品b,c,d,e四件可选时,这个背包能装入的最大价值fi-1,j-Wi就是指单元格b6,值为9,Pi指的是a物品

4、的价值,即6由于fi-1,j-Wi+Pi = 9 + 6 = 15 大于fi-1,j = 9,所以物品a应该放入承重为8的背包以下是actionscript3 的代码java view pla in copy1.publicfunction get01PackageAnswer(bagltems:Array,bagSize:int ):Array2.3.var bagMatrix:Array=;4.var i:int ;5.var item:PackageItem;6.for(i= 0;ibagltems.length;i+)7.8.bagMatrixi = 0;9.10.for(i= 1 ;

5、i=bagSize;i+)11.12.for (var j: int =0;j i)16.17.i 背包转不下item18.if (j= 0)19.20.bagMatrixji =0;21.22.else23.24.bagMatrixji=bagMatrixj-1i;25.26.27.else28.29./将item装入背包后的价值总和30.var itemlnBag:int ;31.if (j= 0)32.33.bagMatrixji = item.value;34.continue ;35.36.else37.38.itemInBag = bagMatrixj-1i-item.weight

6、+item.value;39.40.bagMatrixji = (bagMatrixj-1 i itemInBag? bagMatrixj-1i : itemInBag)4./find answer45.var answers:Array=;46.var curSize:int = bagSize;47.for (i=bagltems.length-1 ;i= 0;i-)48.49.item = bagItemsi as PackageItem;50.if (curSize= 0)51.52.break ;53.54.if (i= 0 & curSize 0)55. 56.

7、 answers.push();57. break ;58. 59. if (bagMatrixicurSize-bagMatrixi-)1 curSize-item.weight=item.value60. 61. answers.push();62. curSize -= item.weight;63. 64. 65. return answers;66. PackageItem 类java view pla in copy2. .1. public class PackageItempublic var name:String;publi

8、c var weight:int ;public var value:int ;int ,value: int )public function Packageltem(name:String,weight:7.8. = name;.weight = weight;.value = value;12. 测试代码javaview plain copys1.var nameArr:Array=a , b , c ,d , e2.var weightArr:Array=2,2, 6, 5, 4;3.var valueArr:Array=6, 3, 5,

9、4,6;4.var bagItems:Array=;5. for (var i: int =O;inameArr.length;i+)6. 7. var bagltem:Packageltem =new Packageltem(nameArri,weightArri,valueArri);8. bagltemsi=bagltem;9. 10. var arr:Array = ac.get01PackageAnswer(bagItems,10);出师表两汉:诸葛亮先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不 懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛

10、下也。诚宜开张圣听,以光先帝 遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑 赏,以昭陛下平明之理;不宜偏私,使内外异法也。侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:愚以 为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能”是以众议举宠为督:愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣, 愿陛下亲之、信之,则汉室之隆,可计日而待也。臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之 际,奉命于危难之间,尔来二十有一年矣。先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明; 故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论