- 16
- 0
- 约2.66千字
- 约 4页
- 2017-06-08 发布于重庆
- 举报
动态规划-01背包问题
动态规划——01背包问题
01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。
01背包的状态转换方程?f[i,j] Max f[i-1,j-Wi]+Pi j Wi , ?f[i-1,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的背包,如何让背包里装入的物品具有最大的价值总和?
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 的代码
[java]?view plain?copy
public?function?get01PackageAnswer bagItems:Array,bagSize:int :Array var?bagMatrix:Array []; var?i:int; var?item:PackageItem; for i 0;i bagItems.length;i++ bagMatrix[i]? ?[0]; for i 1;i bagSize;i++ for var?j:int 0;j bagItems.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; continue; else itemInBag? ?bagMatrix[j-1][i-item.weight]+item.value; bagMatrix[j][i]? ? bagMatrix[j-1][i]? ?itemInBag???bagMatrix[j-1][i]?:?itemInBag //find?answer var?answers:Array []; var?curSize:int? ?bagSize; for i bagItems.length-1;i 0;i-- item? ?bagItems[i]?as?PackageItem; if curSize 0 break; if i 0??curSize? ?0 answers.push item.name ; break; if bagMatrix[i][curSize]-bagMatrix[i-1][curSize-item.weight]
您可能关注的文档
- 加拿大高中留学体制解析.doc
- 加拿大风电产业报告.doc
- 加拿大路易斯堡国家历史公园.docx
- 加拿大魁省安省驾照考试规则简要介绍.docx
- 加拿大麦吉尔大学人类学文科硕士入学要求.doc
- 加标氯离子实验标样配制方法.doc
- 加气混凝土砌块工程.doc
- 加油加满有什么危害.doc
- 加油站1月服务明星.doc
- 加法器_驱动数码管显示.doc
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
原创力文档

文档评论(0)