python背包问题求最大价值 | 动态规划
目录
- 背包问题--问题描述
- 解决步骤
- 1.建立行(物品)-列(容量)矩阵
- 2.分析物品2 3 4出现后,矩阵变化
- 3. 得到状态转移方程
- 4.在实验过程中,对取极大值的疑问
- python该背包问题代码
背包问题–问题描述
解决步骤
1.建立行(物品)-列(容量)矩阵
== w为物品体积矩阵==
首先将背包的容量作为列,物品作为行
当物品1出现时:(体积为3,价值为1)
在背包容量为3时可以装下物品1,此时背包的最大价值为1
2.分析物品2 3 4出现后,矩阵变化
当物品2出现时:(体积为4,价值为5)
背包容量为4时,既可以容纳物品1,也可以容纳物品2,两者只能容纳一个,取两者极大值max价值
背包容量为7时,可以容纳物品1和物品2,两者取和
这里i表示规律情况,括号中表示举例情况
详细分析:在背包容量递增过程中
例如容量为7时,当前物品价值为v[i] (此时即5)
1.选择了第i个物品 (第2个)之后,剩余容量为j-w[i] (7-4)即 3,然后找第i-1个物品(即第1个物品)容量为3时,背包的最大价值为 dp[i-1][j-w[i]]+v[i](此处即6)
2.不选择该物品时,背包最大价值为5
上述两者取极大值 max(5,6),此处取6
当物品3 物品4出现,依次类推可得矩阵
3. 得到状态转移方程
dp[i-1][j]:不选该物体的最大价值
dp[i-1][j-w[i]]+v[i]:选了该物体后剩余空间最大价值+该物体的价值
上述两者取极大值
即 max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])
4.在实验过程中,对取极大值的疑问
在测试了前三个物品时,发现dp[i-1][j-w[i]]+v[i],是一直大于dp[i-1][j] 的
我们只取dp[i-1][j-w[i]]+v[i]的数据,在第四个物品出现时,矩阵变化如下:
分析:在第4个物品(体积为7,价值为9)进入容量为9的背包时(即上图红圈部分)
1.若选择该物品,则背包剩余为2,只能容下第4个物品,此时最大价值为9
2.若不选择该物品,dp[i-1][j]为11,即放第三个物品的时候,最大价值为11(因为此时可以放第3个物品和第2个物品,这两个物品的体积总和为11)
综上,取max的操作不可省略
python该背包问题代码
c = 10
w = [3,4,5,7]
v = [1,5,6,9]
n = len(w)# 建立 n行c列的矩阵
dp = [[0 for i in range(c+1)] for j in range(n+1)]w.insert(0,0)
v.insert(0,0)# for i in dp:
# print(i)for i in range(1,n+1): # i是物体编号for j in range(1,c+1): # j是背包容量if (w[i] <= j): # 如果当前物品所需空间 小于等于 j个空间容量dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])else:dp[i][j] = dp[i-1][j]print("最大价值为",dp[n][c])
python背包问题求最大价值 | 动态规划相关推荐
- Python 0/1背包、动态规划
参考:http://www.cnblogs.com/fcyworld/p/6243012.html Python 0/1背包.动态规划 0/1背包问题:在能承受一定重量的背包中,放入重量不同,价值不同 ...
- 0-1背包 java_0-1背包问题,java的动态规划如题,代码如下public
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 0-1背包问题,java的动态规划 如题,代码如下 public class dongtaiguihua01 { public static void m ...
- 0 1背包问题 java_0-1背包问题,java的动态规划如题,代码如下public
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 0-1背包问题,java的动态规划 如题,代码如下 public class dongtaiguihua01 { public static void m ...
- 经典背包问题3——背包问题求方案数 、背包问题求具体方案
经典背包问题3--背包问题求方案数 .背包问题求具体方案 1. 背包问题求方案数 2. 背包问题求具体方案 1. 背包问题求方案数 有 N 件物品和一个容量是 V的背包.每件物品只能使用一次. 第 i ...
- python concat函数 多张表_教你用python递归函数求n的阶乘,优缺点及递归次数设置方式
本文内容介绍了python递归函数求n的阶乘,优缺点及递归次数设置方式,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧! 递归函数两大特点: 1.能够调用函数自身 2.至少有一个出口( ...
- python programming training(四):动态规划
动态规划,说白了类似于高中的数学归纳法. 递推 核心:穷举.减少共有状态或路径的重复计算. 目录 1. 概念理解 1.1 使用动态规划的条件 1.2 应用动态规划的步骤 1.3 DP和贪心算法区别 1 ...
- 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数
1 01背包问题 有 NNN 件物品和一个容量是 VVV 的背包.每件物品只能使用 一次. 第 iii 件物品的体积是 viv_ivi,价值是 wiw_iwi.求解将哪些物品装入背包,可使这些物品 ...
- 九大背包问题专题--背包问题求具体方案数
8.背包问题求具体方案数 问题: 有N件物品和一个容量是V的背包. 每件物品只能用一次,第i件物品的体积是vi,价值是wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包的容量,且价值总和最 ...
- python怎么算数据平均数,python怎样求10个数的平均数
python怎样求10个数的平均数 发布时间:2021-03-12 09:18:47 来源:亿速云 阅读:100 作者:小新 这篇文章主要介绍了python怎样求10个数的平均数,具有一定借鉴价值,感 ...
- [01背包] 背包问题求具体方案(01背包+求方案数+思维)
文章目录 0. 前言 1. 01背包+求方案数+思维 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包+求方案数+思维 12. 背包问题求具体方案 求方案数也是背包问题.dp 的 ...
最新文章
- 最强大,最简洁的【禁止输入中文】
- TF 2.1.0-rc2发布,2020年停止支持Python 2
- 矩阵连乘算法代码JAVA_矩阵连乘问题的动态规划算法(java)
- ICLR 2019论文解读:量化神经网络
- Android 抽屉效果的导航菜单实现
- pip 安装 mysqlclient 报错 Command errored out with exit status 1
- centos配置网络笔记
- Android学习之网上商城(上)
- 默纳克系统服务器怎么看抱闸,默纳克抱闸制动力检测怎么关闭
- UVA216 UVALive5155 Getting in Line【全排列+回溯】
- 一级建造师-通信-五种施工顺序-口诀
- 蓝桥杯第八届省赛 电子钟 by YYC
- 在ipad上播放flash大集合
- iOS App被拒常见原因
- 毕业设计-基于机器学习的股票预测
- 系统监控——监控系统选型分析及误区探讨
- 漏洞解决方案-文件上传
- 搭建jenkins共享库使用Jenkins Shared Library
- iOS之nib、xib及storyboard的区别
- 谷歌眼镜Mirror API之Menu Items