问题

如果将三种背包问题混合起来。也就是说,有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。应该怎么求解呢?

转化为01背包问题,对的就是和多重背包一模一样,min(V // C[i],M[i])包含了3中情况:

def change_multiple_to_01(N,V,C,W,M):C_ =[]W_ =[]for i in range(N):t = min(V // C[i],M[i])k = 1j = twhile 2*k <= t:C_.append(k*C[i])W_.append(k*W[i]) j -= kk *= 2C_.append(j*C[i])W_.append(j*W[i])def pack_0_1_first(N,V,C,W):    F =[0]*(V+1)    for i in range(1,N+1):for v in range(V,C[i-1]-1,-1):F[v] = max(F[v],F[v-C[i-1]] + W[i-1])return F[V]N_ = len(C_)return pack_0_1_first(N_,V,C_,W_)

使用通用的状态方程:F [i , v] = max {F [i − 1, v − k ∗ C i ] + k ∗ W i | 0 ≤ k ≤ min{M i,V//Ci}

def pack_01_and_complete_and_multiple_Bottom_up(N,V,C,W,M):list = np.zeros((N+1,V+1),dtype=int)for i in range(1,N+1):for j in range(0,V+1):t = min(j // C[i-1],M[i-1])result = -1000for k in range(t+1):A = list[i-1,j-k*C[i-1]] + k*W[i-1]if A > result:result = Alist[i,j] = result         return list[N,V]

假如01和完全混合,可以简化如下处理:

def pack_01_and_complete_Bottom_up(N,V,C,W,M):list =[0]*(V+1)for i in range(1,N+1):if M[i-1] == 1:for v in range(V,C[i-1]-1,-1):list[v] = max(list[v],list[v-C[i-1]] + W[i-1])if M[i-1] == 1000:for v in range(C[i-1],V+1):list[v] = max(list[v],list[v-C[i-1]] + W[i-1])      return list[V]

运行结果:

#%%
N = 7
V = 100
C = [11,2,3,9,13,6,7,5]
W = [1,2,9,7,5,11,6,14]
M = [1000,1,1000,1,1000,1,1,1]print pack_multiple_Bottom_up(N,V,C,W,M)
print change_multiple_to_01(N,V,C,W,M)
print pack_01_and_complete_Bottom_up(N,V,C,W,M)
print pack_01_and_complete_and_multiple_Bottom_up(N,V,C,W,M)print change_multiple_to_01_yes_or_no(N,V,C,M)
print pack_multiple_yes_or_no(N,V,C,M)297
297
297
297
True
1

混合背包问题,和多重背包问题一样的处理相关推荐

  1. 背包问题(01背包问题,多重背包问题,完全背包问题)——基于python的动态规划

    1. 0-1背包问题 1.1 题目描述 有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最大价值是多少 ...

  2. 基础算法--背包问题(01背包问题、完全背包问题、多重背包问题、分组背包问题)

    文章目录 前言 01背包问题 完全背包问题 多重背包问题 分组背包问题 前言 背包问题:给我们 i 件物品,每件物品都有体积 vi 和权重 wi ,给我们限制条件,让我们选择在背包的容量内,物品达到权 ...

  3. 多维多重背包问题_多重背包问题

    悼念512汶川大地震遇难同胞--珍惜现在,感恩生活 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米 ...

  4. 动态规划之背包问题(01背包问题、完全背包问题、多重背包问题 I、多重背包问题 II 、分组背包问题)

    这里是目录

  5. 动态规划解二维多重背包问题

    背包问题 背包问题是一个很经典的算法问题,根据其复杂程度不同又可分为01背包问题.完全背包问题.多重背包问题.二维背包问题等等.本文讲一讲二维多重背包问题的动态规划解法. 01背包问题 有N件物品和一 ...

  6. 多维多重背包问题_满满干货!背包问题全总结(带c++源码)

    目录: 动态规划简介 0-1 背包问题 完全背包问题 多重背包问题 混合背包问题 二维(多维)费用背包问题 分组的背包问题 有依赖的背包问题 动态规划简介 在学习背包问题之前需要对动态规划有一定的了解 ...

  7. O(V*n)的多重背包问题

    多重背包问题: 有n件物品,第i件价值为wi,质量为vi,有c1件,问,给定容量V,求获得的最大价值. 朴素做法: 视为0,1,2,...,k种物品的分组背包 [每组只能选一个] f[i][j]=Ma ...

  8. P03: 多重背包问题

    P03: 多重背包问题 题目 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和 ...

  9. 九十、动态规划系列背包问题之多重背包

    @Author:Runsen 曾几何时,才记得自己还是大一军训的菜鸟,带着 迷茫和憧憬踏入大学,踏入化工学院,却踏入这个行业,殊不知岁月是最高明的小偷,偷走时间,带走青春,一点线索也不留.大学的玩命学 ...

  10. 01背包问题+完全背包问题+多重背包问题

    一 01背包问题 1.1题目 有N件物品和一个容量为V 的背包.放入第i件物品耗费的空间是Ci,得到 的价值是Wi. 求解将哪些物品装入背包可使价值总和最大. 1.2 基本思路 这是最基础的背包问题, ...

最新文章

  1. Cargo 教程介绍
  2. 再这么配培养基,你的细菌都被毒死了!
  3. java 加密算法 base64
  4. python列表根据值找索引_python实现列表中由数值查到索引的方法
  5. MyEclipse:Available memory is low解决办法
  6. 计算机基础ABCDEF,计算机应用基础-在线作业ABCDEF.docx
  7. Magento 移除标签 How to remove “Tags” block from a product page
  8. mysql自建知识库_Mysql 搭建主從復制
  9. Git配置安装使用教程操作github上传克隆数据
  10. python html5lib时间_如何使用Python模块 html5lib
  11. 项目管理工具一:职责清晰的6W1H原则
  12. 获取每日 联想电脑 开机锁屏壁纸
  13. 问request.getRequestDispatcher(“url“).forward(request.response)是什么意思
  14. InnoDB——架构、日志、表和索引
  15. Alpha 事后诸葛亮
  16. 洛谷 P4315 月下“毛景树”(边树剖)
  17. 已解决AttributeError: module ‘tkinter‘ has no attribute ‘TK
  18. 正点原子北斗GPS模块ATK-1218-BD+STM32F103源码学习
  19. Pycharm报错:\Scripts\activate.ps1 cannot be loaded because running scripts is disabled on this system
  20. 串口开发 打印机 读卡器 遇到的问题

热门文章

  1. htaccess简介和16个小技巧
  2. java获取list redis_【快学springboot】14.操作redis之list
  3. 同软件多个线程设置不同ip_软件测试如何自学?收下这份《2020千锋性能测试入门视频教程》...
  4. not null primary key什么意思_为什么我使用了索引,索引却没有生效?
  5. 【Java】字符串转Unicode字符串
  6. python的程序异常类型,Python3.4学习笔记之类型判断,异常处理,终止程序操作小结...
  7. gamma分布_深度学习需要掌握的 13 个概率分布(附代码)
  8. 浏览器的referer是服务器修改的吗,利用浏览器调整http的referer
  9. Chromebook开发者模式Linux,Chromebook 的开发者模式和开发者版本有什么区别?
  10. java system_java System类