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

本文共 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

你可能感兴趣的文章
【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
查看>>
【bzoj3280】小R的烦恼 费用流
查看>>
【bzoj2245】[SDOI2011]工作安排 费用流
查看>>
【bzoj1026】[SCOI2009]windy数 数位dp
查看>>
【自动化测试】搭建一个简单从Excel读取用例内容并输出结果的脚本
查看>>
httpclient爬取性感美图
查看>>
找出1000以内的所有完数。
查看>>
2017"百度之星"程序设计大赛 - 初赛(A)数据分割
查看>>
ckeditor源码编辑模式,添加style、javascript内容丢失的解决
查看>>
关于微信支付的退款那些事
查看>>
linux系统优化
查看>>
apache工作模式
查看>>
方差 标准差
查看>>
18.约瑟夫环
查看>>
C语言#line预处理器
查看>>
anjularjs 路由
查看>>
【洛谷】P2179 [NOI2012]骑行川藏
查看>>
Python函数篇
查看>>
Grid布局和Flex布局
查看>>
关于weblogic server对docker的支持
查看>>