0019算法笔记——【动态规划】0-1背包问题分析报告.docx

0019算法笔记——【动态规划】0-1背包问题分析报告.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
 HYPERLINK /liufeng_king/article/details/8683136 0019算法笔记——【动态规划】0-1背包问题 ?????1、问题描述: ???? 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大? ???? 形式化描述:给定c 0, wi 0, vi 0 , 1≤i≤n.要求找一n元向量(x1,x2,…,xn,), xi∈{0,1}, ? ∑ wi xi≤c,且∑ vi xi达最大.即一个特殊的整数规划问题。 ???????2、最优性原理: ???? 设(y1,y2,…,yn)是 (3.4.1)的一个最优解.则(y2,…,yn)是下面相应子问题的一个最优解: ???? 证明:使用反证法。若不然,设(z2,z3,…,zn)是上述子问题的一个最优解,而(y2,y3,…,yn)不是它的最优解。显然有 ??????????????????????????????????? ∑vizi? ∑viyi?? (i=2,…,n) ???? 且?????????????????????????? w1y1+ ∑wizi= c ???? 因此?????????????????????? v1y1+ ∑vizi?(i=2,…,n) ∑ viyi, (i=1,…,n)? ???? 说明(y1,z2, z3,…,zn)是(3.4.1)0-1背包问题的一个更优解,导出(y1,y2,…,yn)不是背包问题的最优解,矛盾。 ???????3、递推关系: ????设所给0-1背包问题的子问题 ????? ???? 的最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。由0-1背包问题的最优子结构性质,可以建立计算m(i,j)的递归式: ???? 注:(3.4.3)式此时背包容量为j,可选择物品为i。此时在对xi作出决策之后,问题处于两种状态之一: ??? (1)背包剩余容量是j,没产生任何效益; ??? (2)剩余容量j-wi,效益值增长了vi?; ????? HYPERLINK /base/31 \o 算法与数据结构知识库 \t _blank 算法具体代码如下: [cpp]? HYPERLINK /liufeng_king/article/details/8683136 \o view plain view plain? HYPERLINK /liufeng_king/article/details/8683136 \o copy copy //3d10-1?动态规划?背包问题?? #include?stdafx.h?? #include?iostream??? using?namespace?std;??? ?? const?int?N?=?4;?? ?? void?Knapsack(int?v[],int?w[],int?c,int?n,int?m[][10]);?? void?Traceback(int?m[][10],int?w[],int?c,int?n,int?x[]);?? ?? int?main()?? {?? ????int?c=8;?? ????int?v[]={0,2,1,4,3},w[]={0,1,4,2,3};//下标从1开始?? ????int?x[N+1];?? ????int?m[10][10];?? ?? ????cout待装物品重量分别为:endl;?? ????for(int?i=1;?i=N;?i++)?? ????{?? ????????coutw[i]?;?? ????}?? ????coutendl;?? ?? ????cout待装物品价值分别为:endl;?? ????for(int?i=1;?i=N;?i++)?? ????{?? ????????coutv[i]?;?? ????}?? ????coutendl;?? ?? ????Knapsack(v,w,c,N,m);?? ?? ????cout背包能装的最大价值为:m[1][c]endl;?? ?? ????Traceback(m,w,c,N,x);?? ????cout背包装下的物品编号为:endl;?? ????for(int?i=1;?i=N;?i++)?? ????{?? ????????if(x[i]==1)?? ????????{?? ????????????couti?;?? ????????}?? ????}?? ????coutendl;?? ?? ????return?0;?? }?? ?? void?Knapsack(int?v[

您可能关注的文档

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档