![0-1背包问题c语言程序_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-5/10/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e1.gif)
![0-1背包问题c语言程序_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-5/10/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e2.gif)
![0-1背包问题c语言程序_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-5/10/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e3.gif)
![0-1背包问题c语言程序_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-5/10/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e4.gif)
![0-1背包问题c语言程序_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-5/10/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e/32b3b7f9-4ae8-4ef2-b3e2-6bf3df6ac32e5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、0-1背包问题问题描述给定n种物品和一背包,物品i的重量是wi,其价值是pi,背包的容量是如何选择 装入背包中的物品总价值最大?问题分析记ciJW表示前i个物品,在背包容量大小为m的情况下,最大的装载Mo如果不放第i件物品,那么问题就转化为前I件物品放入容量为m的背包中”价值为如果放第i件物品,那么问题就转化为前I件物品放入剩下的容量为的背包中”此时能获得的最大价值就是再加上 通 过放入第i件物品获得的价值pilo因为背包最大容量M未知。所以,我们的程序要从 1到M个一个的试。比如,开始任选N件物品的一个。看对应M的背包,能不能放进去,如果能放进去,并且还有多的空间,则多出來的空间里 能放N-
2、1物品中的最大价值。从以上最大价值的构造过程中可以看出:c (n, m) =maxc (n-l , m), c (nl , m-wn)+p (n)其中ci-l m表不第i件物品不装入背包中,而ci-l m-wi+pi表不第i件 物 品 装入背包中。伪代码:1 最优彳宜 max(xl *pl +x2*p2+, xn*pn)int knapsack(int m, int n,int *w, int *p) bool a;for(int i二1 ;i=n;i+)for(int j二1 ;jci J j ;ci j=a?pi+ci-l:ci 1 j;前者表示放i物品,后者表示不放i物品)else /i
3、号物品重量大于剩余容量,不能再放i号物品ciD =ci-lOJ;)return(cn m) ;/最后的值即为最优值,返回主函数)2求最优 n 7L 0-1 向量(xl ,x2,x3553xn)int getbest(int m, int n, int *w, int *p)if (n=0)retuin 0;/递归,每次递归 n 减 1, n 为 0 时退岀 if (wnm)xn=0;getbest (m, n-l5w, p);else3 3 & & p p n n H31*H31*-muw*淫妥巨今 cludecsscludecss i i o o hvhv吵 R R booboo - -ya
4、psack (inf m旷f f * * p p00 - a吵前m w裆毬血M5k、x 選弗咄w infn5-fn5-f * *if (wici-l j ;ci j=a?pi+ci-l:ci-l j;前者表示放i物品,后者表示不放i物品)else /i号物品重量大于剩余容量,不能再放i号物品return(cn m);最后的值即为最优值,返回主函数)求最优n元0-1向量(xl, x2, x3,xn)int getbest (int mjnt n,int *w, int *p)if(n=O)retuin 0;/递归,每次递归 n 减 1, n 为。时退出 if(wnm)xn=0;getbest (
5、m, n-1, w, p);)else如果 cn m由 pn +cn-1 m-wn而来,则 xn二 1;女 口果 cn m由 cn-l mJ而来贝 S xn=0;n=cn-l m二pn+c n-l Lm-wn;if (x.nl)getbest(m-wEn, nl , w, p);else getbest (m, n-1, w, p);)void mainOint m, n;int 佔NULL;int *p=NULL;printfC输入背包容量和货物个数);scanf (n%d%d ;&m, &n);P=(int *)calloc(n, sizeof (int) ; n 分配 n*sizeof
6、(int)的内存大小,存取 n 个物品的 价 格w=(int *)calloc(n, sizeof (int) ; n分酉己n*sizeof (int)的内存大小,存取n个物品 的质 量if(!p| !w)/检测分配是否成功printf (Not Enough Memory! nk);exit ;/分配失败,退出for(int i二1 ;in+l ;i+)printf (M 物品 x%d 的重量和价值i) ; scanf (a%d%d, w+i5p+i);printf (Kn 总价值最大为:%d: knapsack (m, n, w, p); printf CnB);for(i=0;i=n; i+)/ 打印执彳丁动态规划每步的值 for(int j=0; j=m; j+)printf (%3d : cij); if (j=m) printf (Kna);getbest (m, n3w, p);printf (n 最优 n 兀 0-1 向量为:rf) ; for (i=l ; i=n;i +) pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三农产品网络营销作业指导书
- 2025年怀化考从业资格证货运试题
- 小学二年级数学上册口算题
- 2025年武威货运上岗证模拟考试试题
- 2025年楚雄驾校考试货运从业资格证模拟考试
- 电力调试合同(2篇)
- 电动车补充协议书范文(2篇)
- 2024-2025学年高中语文课时作业4毛泽东词两首含解析粤教版必修2
- 六年级班主任第二学期工作总结
- 小学班主任工作计划二年级
- 中兴ZCTP 5GC高级工程师认证考试题库汇总(含答案)
- 2023年考研考博-考博英语-西安建筑科技大学考试历年真题摘选含答案解析
- 反接制动控制线路电路图及工作原理
- MCNP-5A程序使用说明书
- java基础知识大全
- SMM英国建筑工程标准计量规则中文 全套
- GB 18030-2022信息技术中文编码字符集
- SB/T 10977-2013仓储作业规范
- GB/T 854-1988单耳止动垫圈
- GB/T 2520-2017冷轧电镀锡钢板及钢带
- 【QC成果】提高地下室抗浮锚杆一次验收合格率
评论
0/150
提交评论