算法笔记(c++)--完全背包和多重背包问题

完全背包

完全背包不同于01背包-完全背包里面的东西数量无限

假设现在有5种物品重量为5,4,3,2,1

价值为1,2,3,4,5

背包容量为10

#include #include

using namespacestd;intmain()

{int total_weight = 10;int w[6] = { 0,5,4,3,2,1};int v[6] = { 0,1,2,3,4,5};int dp[11] = { 0};for (int i = 1; i <= 5; i++)for (int j = w[i]; j <= 10;j++)

dp[j]= max(dp[j],dp[j - w[i]] +v[i]);

cout<< "总的价值为:" << dp[10] <

}

其他都和01背包一样,就是遍历j时候的初始化不一样。

这里的dp[j]还是表示前i件物品放入一个为j容量的背包获得的最大价值,每次更新必然保证是当前最优解。就像求最长递增子序列一样。都是把所有情况过一遍然后拿最大的结果。

不多讲直接推算几步就全懂了。

1)首先是当只有物品1号的时候,j初始化为1号物品的重量为5

dp[5]=max(dp[5],dp[5-5]+1]=1

dp[6]到dp[9]都是1,dp[10]=2

2)然后现在是有物品1号和2号,j初始化为2号物品重量4

dp[4]=max(dp[4],dp[4-4]+2)=2

dp[5]=max(dp[5],dp[5-4]+2)=2

dp[..8]=max(dp[8],dp[8-4]+2)=4

其实到这里也差不多了,下面都是一样的。

我们要决定是不是要放这个物品,就从这个物品的大小出发遍历背包容量,然后每次遍历都对比下假如现在腾出这个物品的空间并且放进去比原来的价值还大的话,就放进去。

区别------------01背包和完全背包

01背包遍历是反向的,这样更新就不会影响前面的。

而完全背包正向遍历,会改变前面的所以也就可出现多次存放的了。

多重背包

多重背包再加点限制,数量有限制。

数据如下:

数量

重量

价值

0

0

0

1

5

1

2

4

2

1

3

3

2

2

4

1

1

5

同样设背包为10大小

代码如下:

#include #include

using namespacestd;intmain()

{int total_weight = 10;int w[6] = { 0,5,4,3,2,1};int v[6] = { 0,1,2,3,4,5};int cot[6] = { 0,1,2,1,2,1};int dp[11] = { 0};for (int i = 1; i <= 5; i++)for (int k = 1; k <= cot[i];k++)for (int j = 10; j >= w[i]; j--)

dp[j]= max(dp[j], dp[j - w[i]] +v[i]);

cout<< "总的价值为:" << dp[10] <

}

这次不一步步来了,懂01就可以了。

因为每次01都是放一个而完全背包是放多个,我们也不知道完全 背包放了几个。所以多重背包算是01背包的变种。

既然我们每次遍历都是判断放不放这一个物品,那我们干脆就有几个就遍历几遍。再遍历外面再加一个for就好了

很好理解。

java 完全背包问题算法_算法笔记(c++)--完全背包问题相关推荐

  1. python实现五大基本算法_算法基础:五大排序算法Python实战教程

    排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...

  2. 算法导论 算法_算法导论

    算法导论 算法 Algorithms are an integral part of the development world. Before starting coding of any soft ...

  3. o-1背包问题迭代_经典动态规划:01背包问题的变体

    点击上方蓝字设为星标 东哥带你手把手撕力扣~ 作者:labuladong   公众号:labuladong 若已授权白名单也必须保留以上来源信息 上篇文章 经典动态规划:0-1 背包问题 详解了通用的 ...

  4. java bresenham画直线_图形学笔记: Bresenham画线算法

    图形学课本, 按规矩介绍完矩阵行列式, 第一个算法肯定就是Bresenham画线算法了. 來我们來看看算法 Bresenham是用来画一些不反走样的线段的. 都说了线段肯定有起点和终点, 假设我们: ...

  5. java数据结构 农夫过河_数据结构笔记分享:18 农夫过河(图的算法运用)

    问题描述 一个农夫带着一只狼,一棵白菜和一只山羊要从一条河的南岸到北岸,农夫每次只能带一样东西过过河,但是任意时刻如果农夫不在场时,狼要吃羊.羊要吃菜,请为农夫设计过河方案. 分析: 要求解农夫过河问 ...

  6. java 进制转换算法_算法笔记_033:十六进制转八进制(Java)

    packagecom.liuzhen.systemExe;importjava.util.Scanner;public classMain {//把16进制字符串转成2进制字符串 publicStri ...

  7. java猴子分桃_算法——猴子分桃

    想做些有关"算法"的练习题,在网上无意间看到了一道很经典的算法题--猴子分桃,于是百度了一下,才发现这道题的相关文档很多很多,但最多的也就是使用C++或者Java来解决这道题,而自 ...

  8. JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想

    算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...

  9. 蝴蝶优化算法_算法|FFT基础及各种常数优化,5万字笔记:公式推导+代码模板...

    作者:中二攻子 链接:https://ac.nowcoder.com/discuss/175409 来源:牛客网 本文含NTT.MTT.拆系数FFT.共轭优化FFT.多项式求逆与ln 约定: 1. 表 ...

最新文章

  1. 简明 Vim 练级攻略(转)
  2. csgo如何保存自己的cfg_KXCSGO:CSGO开箱饰品交易方法
  3. 《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎
  4. 【SAP】相关性类型简介
  5. placement new--《C++必知必会》 条款35
  6. 【汇编语言】记录一组数中负数的个数,8086与MIPS汇编程序
  7. 信息学奥赛一本通 1156:求π的值
  8. 二维码相关---java生成二维码名片,并且自动保存到手机通讯录中...
  9. 人工智能将是人类最后的需要 | 大咖来了
  10. c#实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
  11. 虽然今天angular5发布了,但我还是吧这篇angularjs(1)+webpack的文章发出来吧哈哈哈...
  12. 第八课 实战重启验证注册机制
  13. IDEA统计项目代码量
  14. 【自编教材】16万8千字的HTML+CSS基础 适合从0到1-可收藏
  15. html文件中flash视频格式(flv、swf)文件的嵌入方法
  16. 吉比特2021秋招数据分析笔试
  17. vue3中使用tsx
  18. java.sql.SQLException: Access denied for user ‘root’@‘localhost’ (using password: YES)和错误原因 解决方案:
  19. 基于LD3320的51智能遥控语音小车
  20. Delphi XE4 IOS 开发, No eligible applications were found“

热门文章

  1. 突然想 写个 接口定义 【来源于华为和海康 设备接口同步】
  2. 我们奋斗着并将持续奋斗 ----暨清华D-Lab创新基地揭牌仪式
  3. 如何将Node.js Streaming MapReduce引入Amazon EMR
  4. 选择更安全的方式注册你的puppet节点
  5. 10深入Redis Cluster
  6. pid控制从入门到精通pdf_《PID整定指导》白皮书——PID领域的葵花宝典来袭!
  7. python中变量通过变量名访问_如何在python中访问给定变量的名称?
  8. caused by: java.lang.outofmemory_Caused by: java.lang.OutOfMemoryError: PermGen space
  9. 2018年计算机职称考试冲刺,2018年中级会计职称考试冲刺阶段学习计划
  10. editor.md使用php,Editor.md提示修改