目录

  • 背包问题--问题描述
  • 解决步骤
    • 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背包问题求最大价值 | 动态规划相关推荐

  1. Python 0/1背包、动态规划

    参考:http://www.cnblogs.com/fcyworld/p/6243012.html Python 0/1背包.动态规划 0/1背包问题:在能承受一定重量的背包中,放入重量不同,价值不同 ...

  2. 0-1背包 java_0-1背包问题,java的动态规划如题,代码如下public

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 0-1背包问题,java的动态规划 如题,代码如下 public class dongtaiguihua01 { public static void m ...

  3. 0 1背包问题 java_0-1背包问题,java的动态规划如题,代码如下public

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 0-1背包问题,java的动态规划 如题,代码如下 public class dongtaiguihua01 { public static void m ...

  4. 经典背包问题3——背包问题求方案数 、背包问题求具体方案

    经典背包问题3--背包问题求方案数 .背包问题求具体方案 1. 背包问题求方案数 2. 背包问题求具体方案 1. 背包问题求方案数 有 N 件物品和一个容量是 V的背包.每件物品只能使用一次. 第 i ...

  5. python concat函数 多张表_教你用python递归函数求n的阶乘,优缺点及递归次数设置方式

    本文内容介绍了python递归函数求n的阶乘,优缺点及递归次数设置方式,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧! 递归函数两大特点: 1.能够调用函数自身 2.至少有一个出口( ...

  6. python programming training(四):动态规划

    动态规划,说白了类似于高中的数学归纳法. 递推 核心:穷举.减少共有状态或路径的重复计算. 目录 1. 概念理解 1.1 使用动态规划的条件 1.2 应用动态规划的步骤 1.3 DP和贪心算法区别 1 ...

  7. 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数

    1 01背包问题 有 NNN 件物品和一个容量是 VVV 的背包.每件物品只能使用 一次. 第 iii 件物品的体积是 viv_ivi​,价值是 wiw_iwi​.求解将哪些物品装入背包,可使这些物品 ...

  8. 九大背包问题专题--背包问题求具体方案数

    8.背包问题求具体方案数 问题: 有N件物品和一个容量是V的背包. 每件物品只能用一次,第i件物品的体积是vi,价值是wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包的容量,且价值总和最 ...

  9. python怎么算数据平均数,python怎样求10个数的平均数

    python怎样求10个数的平均数 发布时间:2021-03-12 09:18:47 来源:亿速云 阅读:100 作者:小新 这篇文章主要介绍了python怎样求10个数的平均数,具有一定借鉴价值,感 ...

  10. [01背包] 背包问题求具体方案(01背包+求方案数+思维)

    文章目录 0. 前言 1. 01背包+求方案数+思维 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包+求方案数+思维 12. 背包问题求具体方案 求方案数也是背包问题.dp 的 ...

最新文章

  1. 最强大,最简洁的【禁止输入中文】
  2. TF 2.1.0-rc2发布,2020年停止支持Python 2
  3. 矩阵连乘算法代码JAVA_矩阵连乘问题的动态规划算法(java)
  4. ICLR 2019论文解读:量化神经网络
  5. Android 抽屉效果的导航菜单实现
  6. pip 安装 mysqlclient 报错 Command errored out with exit status 1
  7. centos配置网络笔记
  8. Android学习之网上商城(上)
  9. 默纳克系统服务器怎么看抱闸,默纳克抱闸制动力检测怎么关闭
  10. UVA216 UVALive5155 Getting in Line【全排列+回溯】
  11. 一级建造师-通信-五种施工顺序-口诀
  12. 蓝桥杯第八届省赛 电子钟 by YYC
  13. 在ipad上播放flash大集合
  14. iOS App被拒常见原因
  15. 毕业设计-基于机器学习的股票预测
  16. 系统监控——监控系统选型分析及误区探讨
  17. 漏洞解决方案-文件上传
  18. 搭建jenkins共享库使用Jenkins Shared Library
  19. iOS之nib、xib及storyboard的区别
  20. 谷歌眼镜Mirror API之Menu Items

热门文章

  1. 千锋培训python好吗?靠谱吗?
  2. 文件名字超出计算机无法删除,电脑文件名太长无法删除怎么办
  3. 什么人适合学习大数据开发?学大数据难吗?
  4. ADODB.Stream 错误 '800a0bb9' 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突
  5. (RAID原理)JBOD
  6. IBM推出企业信息安全框架
  7. 三维软件中制作动画导入Unity中使用
  8. 服务器bios怎么用u盘装系统,如何进入BIOS并用U盘重装系统
  9. Mac看电视直播(通过MUMU安卓模拟器+自定义直播软件apk)
  10. OSChina 周五乱弹 —— 源花?真土鳖,我要开源小仙女!