博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
背包九讲之四(混合三种背包问题)
阅读量:4970 次
发布时间:2019-06-12

本文共 1042 字,大约阅读时间需要 3 分钟。

1 /* 2 将01背包,完全背包,和多重完全背包问题结合起来,那么就是混合三种背的问题 3 根据三种背包的思想,那么可以得到 4 混合三种背包的问题可以这样子求解 5 for(int i=1; i<=N; ++i) 6 if(第i件物品是01背包) 7     zeroOnePack(c[i],w[i]); 8 else if(第i件物品是完全背包) 9     completePack(c[i],w[i]);10 else if(第i件物品是多重完全背包)11     multiplePack(c[i],w[i],n[i]);12 13 这样能得到最优解的原因是,因为前一层已经是得到最优解了,14 当前层求解最优解的时候,我们考虑要使用三种背包中的哪一种方法15 而不用考虑前一层是怎么得到最优解的16 */17 18 #include 
19 #include
20 int cash;21 int n[11],dk[11];22 int dp[1000000];23 inline int max(const int &a, const int &b)24 {25 return a < b ? b : a;26 }27 void CompletePack(int cost)28 {29 for(int i=cost; i<=cash; ++i)30 dp[i] = max(dp[i],dp[i-cost]+cost);31 }32 void ZeroOnePack(int cost)33 {34 for(int i=cash; i>=cost; --i)35 dp[i] = max(dp[i],dp[i-cost]+cost);36 }37 void MultiplePack(int cnt, int cost)38 {39 if(cnt*cost >=cash)//如果第i种物品的费用总和超过背包容量,那么就是完全背包问题40 CompletePack(cost);41 else42 {43 int k = 1;//二进制拆分44 while(k

 

转载于:https://www.cnblogs.com/justPassBy/p/4279238.html

你可能感兴趣的文章
19.网络策略控制
查看>>
《Programing in Lua》第一部分:CH1-CH10
查看>>
用 async/await 来处理异步
查看>>
手机网页制作需要注意的一点东西
查看>>
Winfon 页签切换及窗体控件自适应
查看>>
Open the Local Activity through the Browser
查看>>
MySQL 数据库的备份和恢复
查看>>
python读取绝对路径的三种方式
查看>>
模块的初始
查看>>
docker + spring boot 打包 部署。
查看>>
HDU4451 Dressing
查看>>
如何判断服务器是否挂掉
查看>>
正则表达式
查看>>
CSS进阶(十八)@font-face
查看>>
Delphi dll 断点调试
查看>>
软件的需求
查看>>
C# winform 动态操作webService
查看>>
Oracle中SQL语句转化IP地址到数字
查看>>
hdu_3341_Lost's revenge(AC自动机+状态hashDP)
查看>>
润乾报表实现排名分析
查看>>