01背包问题理解笔记

  • 代码参考https://www.bilibili.com/video/BV1U5411s7d

代码参考https://www.bilibili.com/video/BV1U5411s7d

#include <iostream>
#include <unordered_map>
#define I 6 //M表征几件物品 0 1 2 3 4 5 6
#define C 21 //N表征背包最大容量 20单位
using namespace std;
int B[I][C] = {0};
int w[] = { 0,2,3,4,5,9 };
int v[] = { 0,3,4,5,8,10 };
void knapsack()
{int i, c;for (i=1;i<I;i++)for (c = 1; c < C; c++){if (w[i] > c){B[i][c] = B[i - 1][c];}else{   int val1 = B[i - 1][c - w[i]] + v[i];int val2 = B[i - 1][c];if (val1 > val2)B[i][c] = val1;elseB[i][c] = val2;}}
}int main()
{unordered_map<int, int> attach;knapsack();cout << B[5][20] << endl;return 0;
}
代码本身复杂度不高,简单来说就是进行一个二维数组的填充过程,,,重点注意的一点是B[i][c]如何动态变化。

B[i - 1][c - w[i]]
[c-w[i]] 表征的是 背包容量被第i个物品占掉后的容量
[i-1] 表征的是 第i个东西不放进去,前i-1种物品”可以”放进去的条件下 背包中所放物品的价值

w[i] > c
此处 判断的是 背包中啥都没放的情况下 ,第i个物品能不能放的下。

01背包问题理解笔记相关推荐

  1. matlab 背包问题动态规划,从01背包问题理解动态规划---初体验

    这个问题有两种解法,动态规划和贪婪算法.本文仅涉及动态规划. 先不套用动态规划的具体定义,试着想,碰见这种题目,怎么解决? 首先想到的,一般是穷举法,一个一个地试,对于数目小的例子适用,如果容量增大, ...

  2. 从网易校招编程题谈起,轻松理解有趣的0-1背包问题

    从网易的一道算法题开始 最近在准备春招实习,偶然做到网易的一道编程题,一方面找了很多博客看的云里雾里,这里特别写下解题的思路和逻辑,一方面加深印象,另一方面供需要的你学习参考.好了,话不多说,开始吧. ...

  3. 粒子群算法理解+求解01背包问题

    最近在学群体优化算法,做个学习笔记吧,本人蒟蒻,有不对的地方还情多多包涵. 1.粒子群算法的理解. 粒子群算法是一种智能优化算法,模拟的是鸟内捕食行为.假设有一群鸟,在一个区域内觅食,这个区域内只有一 ...

  4. 01背包问题深度理解

    问题描述 有n件物品和一个容量为v的背包,求可以得到的最大价值.其中重量是w[i],价值是v[i]. 例  4 5 1 2 2 3 3 4 2 2 01背包问题的常用的f[v]=max(f[v],f[ ...

  5. 分支限界法 01背包c语言,算法笔记分支限界法01背包问题

    <算法笔记分支限界法01背包问题>由会员分享,可在线阅读,更多相关<算法笔记分支限界法01背包问题(12页珍藏版)>请在人人文库网上搜索. 1.问题描述给定n种物品和一背包.物 ...

  6. 01背包问题:图表法带你快速理解动态规划解决01背包问题 附C++源码

    0-1背包问题 所谓0-1背包问题,也就是给你一个重量为M的背包和n种物品,每种物品有一定的重量和价值,在每种物品均可装入背包1次或不装入(不能仅装入物品的一部分)且不超过背包载重量的前提下,问你怎样 ...

  7. 1008-----算法笔记----------0-1背包问题(动态规划求解)

    1.问题描述 给定n种物品和一个背包,物品i的重量是wi,其价值为vi,背包的容量为C.问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大? 2.问题分析 上述问题可以抽象为一个整数规划问 ...

  8. 【动态规划笔记】01背包问题:leetcode415 分割等和子集

    416. 分割等和子集 问题的另一种表述: 给定一个数组nums,判断是否可以从数组中选出一些数,使得这些数之和等于元素和的一半. 此问题为01背包问题. 该问题的一般描述为:能否选择若干物品,使它们 ...

  9. 【动态规划笔记】01背包问题及优化

    dp[i][j]:在前i件物品中选出若干件,放入容量为j的背包,能获得的最大价值 考虑第i件物品 [拿]  还是  [ 不拿 ] (1)j < c[i] 时,背包容量为j,而第i件物品重量大于j ...

  10. 动态规划01背包问题入门学习,详细笔记,推荐阅读

    问题描述: 给定N种物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大?? 在选择物品的时候,对每种物品i只有两种选择, ...

最新文章

  1. 解除织梦dedeCMS标题/关键词/ 简略标题长度限制听语音
  2. 让Windows 8 / 8.1 以及 Windows Server 2012 / 2012 R2的桌面,显示我的电脑图标
  3. VS Web.config 密码加密加密
  4. Android开发之判断APP前后台的方法
  5. 《ASP.NET Core 微服务实战》-- 读书笔记(第7章)
  6. 法国帅哥教授告诉你,为什么数学家是全世界最好的工作,以及数学有多美?...
  7. HDOJ 1285 确定比赛名次(拓扑排序)
  8. 复数乘法_初学讲义之高中数学十八:复数
  9. 《浪潮之巅》完全系类——IT人士必读经典
  10. oracle如何设置权限,Oracle创建用户并设置权限
  11. 具体数学-第8课(取整进阶)
  12. 兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素
  13. mac编写python_刚到手Mac写Python的一个简单问题
  14. 难以置信:遇到一位 a=0 也不会写的程序员
  15. leapmotion手势交互引擎
  16. WindowsXP系统主题成Windows7风格windowsxp主题包
  17. 何凯明新作ViTDET:目标检测领域,颠覆分层backbone理念
  18. lol更新显示正在连接服务器,正在连接服务器-lol一直显示“正在连接服务器”...
  19. win7在网上邻居上看不到别的电脑如何解决
  20. 电路中的正弦信号 Sin

热门文章

  1. javassist组件分享利用javassist动态创建一个类
  2. 麦迪逊大学计算机科学咋样,威斯康星大学麦迪逊分校计算机专业排名
  3. c语言的api_为什么C语言依然是必学的编程语言?
  4. java工程师_北京java工程师课程
  5. PS使用:解决图片使用PS打开提示无法完成请求,因为找到不知名的或无效的JPEG标志符类型
  6. Javascript特效:侧边广告
  7. 死于决斗的数学天才伽罗瓦-人生的有限域
  8. Ubuntu16.04安装ROS Kinetic详细过程
  9. OpenCV_霍夫变换_直线检测_HougLines
  10. python的DataFrame排序问题