背包问题前几篇文章:

  1. 01背包详解
  2. 完全背包详解

    文章目录

    • 一、什么是多重背包问题?
    • 二、例题分析
      • 1. 题目:
      • 2.第一种:朴素做法
      • 3.第二种:二进制优化
      • 4.第二种:单调队列优化<待写>

一、什么是多重背包问题?

有n种物品,每种物品的单件体积为v[i],价值为w[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品有s[i]件。
多重背包和完全背包、01背包区别:

  1. 01背包在选择某一个物品时只有不选和选一次两种情况
  2. 完全背包在选择某一个物品时可以不选,也可以选一次,选两次。。。选择次数没有上限(只要背包能放下)
  3. 多重背包在选择某一个物品时可以不选,可以选一次、二次。。。最多只能选s[i]次(只要背包能放下)

二、例题分析

1. 题目:

原题测试样例不容易看出规律,因此使用其他的测试样例:
输入样例:
3 7qu
2 3 12
2 5 15
1 2 3
输出样例:
12

2.第一种:朴素做法

01背包:第i件物品可以取0件,可以取1件
多重背包:第i件物品可以取0件,取1件、取2件······取s[i]件
多重背包转化为01背包求解:把第i件物品换成s[i]件01背包中的物品,每件物品的体积为k* v[i],价值为k * w [i] (0<=k<=s[i])
核心代码:

for(i=1;i<=n;i++)for(j=m;j>=v[i];j--)for(k=0;k<=s[i]&&k*v[i]<=j;k++)f[j]=max(f[j],f[j-k*v[i]]+k*w[i]);

3.第二种:二进制优化


样例可以表示为:

二进制优化核心代码:

    int cnt=0;//计数器for(int i=1;i<=n;i++){int a,b,s;cin>>a>>b>>s;int k=1;//二进制拆分while(k<=s){cnt++;v[cnt]=a*k;w[cnt]=b*k;s-=k;k*=2;}if(s>0)//剩余{cnt++;v[cnt]=a*s;w[cnt]=b*s;}}

拆分完之后就变成了:

优化完之后在用一次01背包:

    for(int i=1;i<=cnt;i++)for(int j=m;j>=v[i];j--)f[j]=max(f[j],f[j-v[i]]+w[i]);cout<<f[m]<<endl;

4.第二种:单调队列优化<待写>

动态规划背包问题之多重背包详解相关推荐

  1. 动态规划背包问题之01背包详解

    文章目录 一.问题引入 1.什么是动态规划? 2.什么是背包问题? 3.什么是01背包? 4.背包问题怎么做? 二.例题讲解 1.题目: 2.分析 2.1 第一步:状态表示 2.2 第二步:确定状态转 ...

  2. 动态规划 —— 背包问题 P03 —— 多重背包

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

  3. 动态规划 背包问题小结 0-1背包(采药 九度第101题) 完全背包(Piggy-Bank POJ 1384) 多重背包(珍惜现在,感恩生活 九度第103题)

    本小结介绍0-1背包.完全背包以及多重背包问题 记忆要点: 0-1背包:二维数组情况下,顺序遍历体积或者倒序均可以                降维情况下需倒序遍历体积 完全背包:数组降维+顺序遍历 ...

  4. WINME/WIN2000/LINUX多重启动详解(4年前写的,不知道现在还有没有用)

    WINME/WIN2000/LINUX多重启动详解 张仁惠 (Harbin 2001.3 http://www.filesee.com) 目前由于硬盘和内存价格的不断下降,很多朋友的电脑都是大硬盘,内 ...

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

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

  6. 古有陈天华万字血书抗沙俄,今有本剧蒻万字背包虐dp(01,完全,多重,分组,混合等各种背包详解 + 板子题+ 奇奇怪怪滴变式题)

    前言: 本文介绍了01背包.完全背包.多重背包.混合背包.分组背包等背包,并对其进行透彻的剖析,并附上了板子题,供您白嫖,以及一些奇葩变式,颇有意思,供你琢磨玩弄.此外绝大部分题都有二维数组和滚动数组 ...

  7. 各种背包详解(自己总结) 金明的预算和LOL(可依赖的背包问题)

    在讲可依赖背包之前先回顾下背包九讲的内容,现在做dp多了发现背包问题真的是dp的鼻祖,好多种问题都是基于背包的模型发展而来,就是不是基于背包的,把背包搞懂也有利于你自己学习dp,以此来想到其它状态转移 ...

  8. 背包详解:完全背包与多重背包

    目录 完全背包 优化一:输入优化 优化二:二进制 优化三:重复放入的 01 背包 多重背包 总结 完全背包 有一个大小为 m 的背包,有 N 种物体,每种物品的价值为 Vi, 大小为 Ai, 并且每种 ...

  9. 为了OFFER,菜鸟的我必须搞懂动态规划系列三个背包问题之多重背包(二进制优化方法)

    @Author:Runsen @Date:2020/9/17 多重背包有三层循环,如果数据非常的大,那么程序就会变得非常悲伤.在多重背包的问题,其实更多的是考查多重背包的二进制优化方法.学习二进制优化 ...

最新文章

  1. Masking GAN pytorch
  2. python另一个程序正在使用此文件_另一个程序正在使用此文件,进程无法访问
  3. 手动选择显示_为什么考驾照的人多数选择C1而不是C2?老教练说出了真相....
  4. 一点总结,手机应用开发前景
  5. docker配置深度学习环境
  6. Qt——菜单栏、工具栏、状态栏
  7. (最通俗易懂的)目标跟踪MOSSE、KCF
  8. C语言输出九九乘法口诀表
  9. 面试常见的逻辑推理题
  10. 检测图书ISBN编号校检位
  11. ORACLE索引分裂(enq: TX - index contention)
  12. 横跨十年CPU架构回顾
  13. NOIP2017大总结
  14. cross_val_score的 scoring参数值解析
  15. OUC离散数学II实验二(Python+Cpp)
  16. 什么是网络免费2.0?
  17. VIVO Y30标准版PD2036A强制线刷,亲测可过
  18. 全志H6方案板香橙派OrangePi 3开发板26pin GPIO口测试
  19. 01-pie小游戏(基本图形的绘制)
  20. 华为鸿蒙手机有哪几款,华为哪款手机搭载鸿蒙?_科技数码通

热门文章

  1. 滴滴顺风车下线整改325天 这款产品变成什么样了?
  2. c++ std::timed_mutex 有时限锁定
  3. 【hd水题】hd2018 母牛的故事
  4. python字符串,列表,元组,字典的基本操作
  5. 华为手机双卡有android,安卓卡慢?余承东:国内或只有华为能解决
  6. spring aop中pointcut表达式
  7. 十个“三角形”汉字,好看、不好认
  8. java之Pattern类详解
  9. 区块链与大数据有着怎样的关系?
  10. 【arduino】米思齐Mixly模块编写修改方法,非常简单的Mixly模块修改方法