动态规划问题一直以来都是利用空间换取时间。

动态规划问题一直以来最经典的就是 0 1背包问题 ,再有点难度就是 完全背包问题 以及多重背包问题

0-1背包问题

题目描述:有一个容量为 V 的背包,和一些物品。这些物品分别有两个属性,体积 w 和价值 v,每种物品只有一个。要求用这个背包装下价值尽可能多的物品,求该最大价值,背包可以不被装满。

其实这问题刚接触是 我靠 一脸懵逼 这是考数学呀!!! 瞬间感觉干饭都不香了。
其实只需要考虑每个物品两种形式 在背包和没在背包在背包 和 没在背包在背包和没在背包

第一步 对于每一个物品,有两种结果:能装下或者不能装下。

第一,包的容量比物品体积小,装不下,这时的最大价值和前i-1个物品的最大价值是一样的。(就是说口袋太小了 放不进去 ,,但是物品价值 和口袋里的物品一样值钱)

第二,还有足够的容量装下该物品,但是装了不一定大于当前相同体积的最优价值,所以要进行比较。(就是说 口袋很大 还能放里面 ,,但是和已经有的物品比较 说不来值钱还是不值钱)

第二步 就是考虑边界条件(万一装把口袋撑破了 ,是不是啥都装不进去了)
dp[i][j]啥意思 这样定义 就是说 把i个物品 装进 背包容量为 j 的背包 达到最大RMB价值。
初始时: dp[0][j]=0 (0<=j<=V)
来翻译一下 就是说 开始 i为0 里面没有东西 是空口袋 但是 j 不变 因为 口袋本身容量就这样大,里面没有东西 自然就不值钱为0
第三步考虑变换过程 就是转移状态
第i个物品的体积为w,价值为v,则状态转移方程为
当 j<w 时 dp[i][j]= dp[i-1][j]; 翻译一下 就是说第i件东西装不下 ,而且最大价值不改变,也就是有i行 没i也行 价值没变,但是有i容量就过载了
当 j<=w dp[i][j]=max(dp [i-1][ j-l ist[i].w] + v, dp[i-1][j]);这段太长了
解释一下 就是说 dp[i][j] 的值 由装i前的一个决定 比如 已经装了3斤 现在要装5斤 那么装这5斤 得看3斤装后的状态 万一3斤装了没位置了 那就不用装5斤了 。
所与i的前一个 dp[i-1][j-list[i].w] 这里加入v就好比 能装下5 斤,后边理解为 比较原本最大价值 如果装了价值变小了 还不如不装,所以求最大值 看看那各价值最大

接下来下代码 也是最头疼的

最大值就这

int max(int a, int b)//取最大值函数
{return a > b ? a : b;
}

背包结构体 和dp

struct Thing
{int w;int v;
}list[101];int dp[101][1001];

终极main函数

int main()
{int s, n;//背包容量和物品总数while (scanf("%d%d", &s, &n) != EOF){for (int i = 1; i <= n; i++){scanf("%d%d", &list[i].w, &list[i].v);//读入每个物品的体积和价值}dp[0][0] = 0;for (int i = 1; i <= s; i++) dp[0][i] = INF;//初始化二维数组for (int i = 1; i <= n; i++)//循环每个物品,执行状态转移方程{for (int j = s; j >= list[i].w; j--){dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - list[i].w] + list[i].v);}for (int j = list[i].w - 1; j >= 0; j--){dp[i][j] = dp[i - 1][j];}}printf("%d\n", dp[n][s]);}return 0;
}

这里注意个问题 我是倒写

 for (int j = s; j >= list[i].w; j--)for (int j = list[i].w - 1; j >= 0; j--)

why why why 举手回答
那是因为 要求恰好装满背包时,把dp[0][0]设为0,其余dp[0][i]设为负无穷即可,这样只有恰好达到dp[n][s]时,dp[n][s]才为正值,所以 我们直接就认为 背包能装满s 容量 进而判断 当容量大于 i 间物品是就装入进去 , 来来 给画画

下节说说 用滚动数组优化问题 二维变一维

动态规划之 0-1 背包问题相关推荐

  1. 【动态规划】0/1背包问题

    问题 H: [动态规划]0/1背包问题 时间限制: 1 Sec  内存限制: 64 MB 提交: 152  解决: 95 [提交] [状态] [讨论版] [命题人:admin] 题目描述 张琪曼和李旭 ...

  2. 动态规划之0/1背包问题(动态规划入门)

    动态规划很早以前就接触过但是因为太晦涩难懂一下子到现在才开始真正的学习到其中的道理,0/1背包问题是动态规划的入门类问题 比较好理解 首先我们要知道动态规划是用于解决最优解的问题 它是一种思想而不是一 ...

  3. 【武汉理工大学计算机复试刷题】(C语言)动态规划求解0/1背包问题之求最大价值

    文章目录 题目描述 思路分析 代码 运行情况 输入文件 运行结果 发现的问题 题目描述 一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重星分别是W1,W2, - Wn,它们的价值分别为C ...

  4. 0/1背包问题——动态规划方法

    1.定义 动态规划:把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解. 2.求解步骤 (1)找到状态转化条件 (2)归纳状态转移方程 (3)定义初始条件值 3.实例解析--0/1背包 ...

  5. 动态规划——0/1背包问题(全网最细+图文解析)

    ✨动态规划--0/1背包问题(全网最细+图文解析) 作者介绍:

  6. 0/1背包问题——动态规划、回溯、分支限界法对比

    0/1背包问题--动态规划.回溯.分支限界法对比 2017.12.19 20:42:02 字数 3713 阅读 2820 目录 1.问题描述 1.1 问题描述 1.2 问题的数学表示(规划类问题,此种 ...

  7. 0/1背包问题-----动态规划求解

    问题描述 有n个物品和一个容量为c的背包,从n个物品中选取装包的物品.物品i的重量为w[i],价值为p[i].一个可行的背包装载是指,装包的物品总重量不超过背包的重量.一个最佳背包装载是指,物品总价值 ...

  8. 动态规划的用法——01背包问题

    动态规划的用法--01背包问题 问题主题:著名的01背包问题 问题描述: 有n个重量和价值分别为wi.vi的物品,现在要从这些物品中选出总重量不超过W的物品,求所有挑选方案中的价值最大值. 限制条件: ...

  9. 动态规划——物品无限的背包问题

    动态规划--物品无限的背包问题 物品无限的背包问题.有nn种物品,每种均有无穷多个.第i种物品的体积为ViV_i,重量为WiW_i.选一些物品装到一个容量为CC的背包中,使得背包内物品在总体积不超过C ...

  10. 令人头疼的背包九讲(1)0/1背包问题

    点击上方"Jerry的算法和NLP",选择"星标"公众号       重磅干货,第一时间送达 背包问题是一个经典的动态规划模型.它既简单形象容易理解,又在某种程 ...

最新文章

  1. 对于一个IT宅男先脱光再说
  2. Android 安全专项-Xposed 劫持用户名密码实践
  3. boost::spirit模块实现字符分类示例
  4. c语言windows api编程,windows API编程学习
  5. 打造钉钉事件分发平台之钉钉审批等事件处理
  6. 优秀学生专栏——王浩
  7. mt4 指标 涨跌幅 颜色k线_通达信精选指标——彩色K线指标
  8. thinkphp整合Ueditor编辑器
  9. 【汇编语言】进制转换
  10. 各地特色美食与点菜的艺术
  11. DataStream API及源算子
  12. 安卓recovery流程分析【第二篇】
  13. 计算机里的程序文件删除不了怎么办,文件删除不了怎么办 顽固文件删除方法大全...
  14. 运放输入偏置电流方向_输入偏置电流和输入失调电流(运放参数的详细解释和分析)...
  15. python出现syntaxerror_python 报错syntaxerror怎么解决
  16. 掌上电脑是不是微型计算机,《掌上电脑Vs.商务通》的背后
  17. Axure下载安装汉化
  18. 想把静态网页放到服务器上,怎么样让所有人都去访问到
  19. mysql表文件与结构_MySQL文件结构、逻辑架构及sql执行流程分析
  20. excel查询oracle数据库,用Excel直接查询Oracle中的数据

热门文章

  1. 跳动的“loading”,个个都很惊艳
  2. c#中应用skinEngine给应用程序换皮肤
  3. 多智能体协同传输的事件触发通信与控制的深度强化学习(ICRA-2021)
  4. python实现图(卖芒果)
  5. 电脑播放视频一卡一卡的,一顿一顿的 怎么办
  6. Visio2007使用技巧
  7. 什么软件能打开prt文件_PRT文件扩展名 - 什么是.prt以及如何打开? - ReviverSoft...
  8. 高通骁龙845的android手机有哪些,2018年骁龙845手机有哪些?骁龙845手机怎么样?...
  9. 【干货】绕过校园网认证实现轻松上网
  10. 梁宁:2019年是5G时代,也是革命性的新营销阵地