将01背包,完全背包,和多重完全背包问题结合起来,那么就是混合三种背的问题

根据三种背包的思想,那么可以得到
混合三种背包的问题可以这样子求解
  for(int i=1; i<=N; ++i)
    if(第i件物品是01背包)
      zeroOnePack(c[i],w[i]);
    else if(第i件物品是完全背包)
      completePack(c[i],w[i]);
    else if(第i件物品是多重完全背包)
      multiplePack(c[i],w[i],n[i]);
这样能得到最优解的原因是,因为前一层已经是得到最优解了,
当前层求解最优解的时候,我们考虑要使用三种背包中的哪一种方法
而不用考虑前一层是怎么得到最优解的

#include <stdio.h>
#include <string.h>
int cash;
int n[],dk[];
int dp[];
inline int max(const int &a, const int &b)
{
return a < b ? b : a;
}
void CompletePack(int cost)
{
for(int i=cost; i<=cash; ++i)
dp[i] = max(dp[i],dp[i-cost]+cost);
}
void ZeroOnePack(int cost)
{
for(int i=cash; i>=cost; --i)
dp[i] = max(dp[i],dp[i-cost]+cost);
}
void MultiplePack(int cnt, int cost)
{
if(cnt*cost >=cash)//如果第i种物品的费用总和超过背包容量,那么就是完全背包问题
CompletePack(cost);
else
{
int k = ;//二进制拆分
while(k<cnt)//判断剩下的数字能不能够拆分为k
{
ZeroOnePack(cost*k);
cnt -=k;
k<<=;
}
ZeroOnePack(cnt*cost);
}
}
int main()
{
//输入的处理以及函数的调用
return ;
}

如果对你有所帮助,别忘了加好评哦;么么哒!!下次见!88

最新文章

  1. [Hadoop] Hadoop学习历程 [持续更新中…]
  2. salesforce 零基础学习(四十九)自定义列表分页之使用Pagination实现分页效果 ※※※
  3. linux的压缩命令
  4. 0929mysql前缀索引如何找到合适的位数
  5. Selenium WebDriver 处理table
  6. BZOJ2492 Revenge of Fibonacci
  7. [leetcode]_Merge Two Sorted Lists
  8. Java实战之04JavaWeb-05事务和连接池
  9. Flexigrid的使用(整合Struts2)
  10. UITextField的属性设置
  11. SQL函数学习(一):substring()函数
  12. 前端学PHP之Session
  13. python之列表作为函数的参数
  14. Banner图二三事
  15. mysql数据库索引优化与实践(一)
  16. SQL FORMAT() 函数
  17. SSIS 包部署错误 0xC0010014
  18. SQL优化笔记一:索引和explain
  19. vue2.0 技巧汇总
  20. 延期版本webstorm(解决许可证过期,注册,激活,破解,码,支持正版,最新可用)

热门文章

  1. [Qt Creator 快速入门] 第2章 Qt程序编译和源码详解
  2. ACM_递推题目系列之二认错人(递推dp)
  3. sublime text 3 使用技巧
  4. win7升级到win10不能上网解决方法
  5. ES6特性之模块【Modules】
  6. HP M177打印机驱动安装问题与解决
  7. Java:一个简捷的可分页的ResultSet实现
  8. LeetCode第63题--不同路径
  9. MFC_2.10选项卡控件的封装
  10. vue中websoket的使用