01背包类似问题一般是给3个参数

1:sum 背包总重量

2:w[]数组, 数组每个数为单个物品重量

3:v[]数组,每个数为单个物品价值,

一般就是要求在背包能装得下的情况下,保证价值最大。

核心思路: 就是1个物品和背包总重量为1~总重量为sum的情况下获得的最大价值, 以此轮询,  在背包总重量为sum的最大价值求出来后再轮询2个物品 总重量为1~总重量为sum的情况下获得的最大价值。不断轮询 直到获得n个物品下背包总重量为su'm的最大价值,   接下来我以自己个人的理解讲解这个思路的原理:

首先我要拿到n个物品下背包总重量为sum的最大价值, 就要进行判断第n个物品放进来的必要性,比如说第n个物品的重量大于sum,那么肯定就放不下,那么 我的目的就变成了求n-1个物品下背包总重量为sum的最大价值,

如果第n个物品的重量是小于等于sum的话我就考量一下,放进来是否比原先不放进来的价值要大。如果不是,那我也没必要放。如果是, 那么 我就要腾出第n个物品所占的重量空间,然后再把第n个物品放进去,另外要重点注意,我腾出第n个物品所占的空间时,状态就是n-1个物品下背包总重量为sum-w[n]的情况下所能获得的最大价值 。思路到了这里就已经很清晰了,   所以为了求n个物品下背包总重量为sum的最大价值,我们就必须求出n-1个物品下总重量为 sum的最大价值,以及背包还剩sum-w[n]情况下的最大价值。这样层层递推下来就发现不得不把1~n个物品和1~sum重量情况下的最大价值求出来.

dp[i][j]的核心判断就是1: 装得下第i件物品, 然后判断值不值得装

2:装不下

  贴出代码如下,   测试数据可以如下

40

11 12 23 36

11 11 20 30

最后得出的数据即为所求的最大价值。

另外 华为机试的一道编程题还要求求出最大价值时所取的物品

我的思路是这样的

就是说最后一排的最大数字如果和上一排的数字一样 说明这个物品多余, 如果不一样说明这个物品不多余,不多余以后我就用sum-这个物品的重量,   然后再求dp[--a][sum-w[this]] 又按照同样的方法进行循环 代码如上图

01背包问题动态规划-atao相关推荐

  1. 01背包问题 动态规划 java实现 简单通俗易懂

    ** 01背包问题 动态规划 ** 1.动态规划 什么是动态规划?动态规划就是将一个大问题不断向下拆分成小问题,直到拆分出的小问题可以求出其解,然后将小问题的解不断的向上合并,最终得到大问题的解决方案 ...

  2. 01背包问题动态规划(二维数组)

    01背包问题动态规划(二维数组) 问题描述 ​ 一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,-,Wn,它们的价值分别为C1,C2,-,Cn,求旅行者能获得 ...

  3. 0-1背包问题动态规划模型的Python解法

    0-1背包问题动态规划模型的Python解法 1.01背包问题 2.Python解决方案 3.01背包问题例题 1.01背包问题 背包问题(Knapsack problem)是一种组合优化的NP完全问 ...

  4. 背包问题动态规划matlab,01背包问题动态规划详解

    计算机算法分析考试:动态规划0-1背包问题,怎么算她说她没醉,却一直摇摇晃晃掉眼泪:你说你爱她,却从未想过给她一个家. 要考试了,老师给划重点有一题:动态规划0-1背包问题,怎么算. 怎么理问题描述: ...

  5. 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析

    // 利用动态规划解决0-1背包问题 using System; using System.Collections.Generic; using System.Linq; using System.T ...

  6. 算法设计与分析 0-1背包问题 动态规划解法【超详细】

    0-1背包问题 问题描述 给定i个物品和一个容量为的背包,物品的重量是Wi,其价值为Vi 物品个数为i,背包容量为C. 如何选择装入背包内的物品,使得装入背包中的物品的总价值最大? 其中,每种物品只有 ...

  7. 01背包问题—动态规划求解

    动态规划 01 背包问题 关键代码 for (int i = 1; i <= n; ++i){for (int j = 0; j <= c; ++j){if (j < w[i]) / ...

  8. 【转】01背包问题动态规划详解

    转载自 sunstar1989 最终编辑 中华复生母 动态规划是用空间换时间的一种方法的抽象.其关键是发现子问题和记录其结果.然后利用这些结果减轻运算量. 比如01背包问题. 因为背包最大容量M未知. ...

  9. 01背包问题 动态规划求解方法 动态方程的详细解释 能理解的解释(附python代码)

    01背包问题属于组合优化问题:假设你要出门旅游,你现在有一个书包,这个书包的容量(capacity)有限,有很多物品如牙刷.防晒霜.雨伞.水杯等等,但书包装不下所有物品,因此我们必须有所取舍.那么通常 ...

最新文章

  1. linux下使用free命令查看实际内存占用
  2. docker系列之安装配置-2
  3. 配置web项目session永不超时
  4. Biorhythms(POJ-1006)
  5. 天津大学计算机考试题库,天津大学在线考试题库及答案[开放英语专]
  6. 测试基础-04-用例的编写评审
  7. 七彩虹智能主板设置U盘启动教程
  8. 推荐系统-Task02数据库基本使用
  9. Python实战——过采样数据的处理之改进的SMOTE算法
  10. Eureka工作原理
  11. 旧瓶装新酒——memcache作为DRDOS反射放大器
  12. 《上瘾:让用户养成使用习惯的四大产品逻辑》读书笔记摘录
  13. 高德 php,高德地图WEB版的使用
  14. mysql numeric 区别_Mysql中NUMERIC和DECIMAL类型区别比较
  15. 英语钻石法则(一)-----句子中心论
  16. 三星SAIT China Lab招聘研究员(校招/社招)及实习生
  17. MySQL 据库管理系统
  18. 常用的cmd命令与Linux命令
  19. 去掉ubuntu下windows文件夹绿色背景
  20. SAP QM 检验点 (Inspection Point) 的使用

热门文章

  1. 游戏创业公司技术体系构建
  2. 谈谈对华为认证与思科认证的看法(查阅了一些材料,得出的详细看法,欢迎大家进来相互交流学习。)
  3. 002拯救oibh总部
  4. 安全证书相关知识补充
  5. PTA:7-16 求符合给定条件的整数集 (15分)
  6. 优化系统服务提升Win7系统运行速度
  7. 学生选课html模板,C#学生选课管理系统(源码+数据库+文档)
  8. 响应式设计时代,我们该如何设计网站?
  9. 芒果iOS开发之duplicate symbols for architecture x86_64错误
  10. 程序员壮烈牺牲的阿里巴巴面试,这些面试题带回来分享给大家