1. 物品无限背包问题.

有n种物品, 每种都有无穷多个, 第i种物品体积为Vi, 重量为Wi. 选一些物品装到一个容量为C的背包里, 使得背包内物品总体积不超过C的前提下重量尽量大.1<n<=100,1<=Vi<=C<=10000,1<=Wi<=10^6

[分析] 带权的DAG最长路径问题, 把代码中的+1改为+W[i]即可.

2. 0-1背包问题

只凭"剩余体积"这个状态, 无法得知该物体是否被用过.

这里引入"多阶段决策的最优化": 用d(i,j)表示当前在第i层, 剩余容量为j时接下来的最大重量和.

则d(i,j)=max{d(i,j),d(i+1,j-V[i])+W[i]}, i>n时d(i,j) = 0, j<0时负无穷.

    for ( int i = n; i >= 1; i-- ) {for ( int j = 0; j < C; j++ ) {d[i][j] = ( i == n ) ? 0 : d[i+1][j];if ( j >= V[i] ) d[i][j] = MAX(d[i][j], d[i+1][j-V[i]] + W[i]);}}

运算过程示意:

答案就在右下角d[0][C].

简化空间占用: 滚动数组

现在每次循环只用到2维表中的后两行数据, 而且第 i 行第 j 个数据只依赖第 i-1行中小于 j 的数据, 所以改一下内层循环的顺序就可以把二维数组简化成一维数组.

Tip:

在递推算法中, 如果计算顺序很特殊, 而且计算新状态所用到的原状态不多, 可以尝试使用滚动数组减少内存开销.

不过在使用滚动数组后, 解的打印变的困难了, 所以在需要打印方案甚至要求字典序的最小方案的场合, 应慎用滚动数组.

只要稍微改动一下代码~

for ( int i = n; i >=0; i-- ) {for ( int j = C; j >= 0; j-- ) {d[j] = ( i == n ) ? 0 : d[j];if ( j >= V[i] ) d[j] =  d[j] > d[j-V[i]] + W[i] ? d[j] : d[j-V[i]] + W[i];printf("%3d ", d[j]);}printf("\n");
}                                

转载于:https://www.cnblogs.com/tsubasa/archive/2012/12/17/2821525.html

动态规划之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. SEO优化可以从这几个方面着手
  2. jq选中单选框后文本框不可编辑_打开速度最快最强大的PDF免费工具,编辑+阅读功能一体...
  3. 数字能查出笔迹吗_大家都知道文字可以做笔迹鉴定,我想问一下专家阿拉伯数字是否也可以做笔迹鉴定正确率高吗?...
  4. Maven 父子工程出现 [ERROR] 'dependencies.dependency.version' for xxxjar is missing. 问题
  5. Windows 平台下Myeclipse 10 中SVN 插件使用教程(TortoiseSVN)
  6. could not be installed at this time
  7. mpls 保留标签值_浅析MPLS多协议标签交换的发展历程
  8. 讯飞输入法(原讯飞语音输入法) V2.1.1708 官方版-完美软件下载
  9. 【转】java获取当前路径的几种方法
  10. CSDN博文精选:最受欢迎的系列专栏博客推荐
  11. mysql概念模型中的3种基本联系_数据库建模三步骤:概念模型
  12. 关于项目中数据库密码加密的使用
  13. 体验共享单车后对于Locman技术实现的几点思考
  14. 通信人每天挂在嘴边的“网管”,到底是个啥东东?
  15. Python爬虫实例(一)
  16. shell学习笔记三
  17. iPhone投屏到mac电脑简单方法之一
  18. 【荐】自己做一款不错的JS+CSS多级导航菜单
  19. APP后台上传Nginx+Tomcat服务器后图片可以上传但无法访问问题解决
  20. mysql常用查询语句

热门文章

  1. 用java script随机数_js中Math.random()生成指定范围数值的随机数【转】
  2. pdf覆盖图片 Java_Java 添加、替换、删除PDF中的图片的示例代码
  3. PHP中的数组建必须为数字吗,PHP检查数组中缺少的数字
  4. 计算机实验报告表九,北理大学计算机实验基础实验九实验报告表-20210617084645.pdf-原创力文档...
  5. java对比swith和if的不同,浅谈选择结构if语句和switch语句的区别
  6. 将Markdown嵌入到我们的HTML页面中
  7. 博弈论(巴什博奕,威佐夫博弈,尼姆博弈)
  8. Hadoop系列之Reporter,Partitioner,JobConf, JobClient
  9. Qt官网变更【2012】
  10. 07_支持向量机3_统计学习方法