dp 完全背包问题python
我们今天来学习完全背包问题,完全背包问题是基于0-1背包的基础,如果不明白或者忘记了可以点击下面的链接。
https://blog.csdn.net/qq_53500156/article/details/123454958?spm=1001.2014.3001.5501
为什么呢,0-1背包问题,它是按照前一行来进行计算,而完全背包问题就可以在该行进行判断与计算。好好理解
c = 10 #背包容量
w = [3,4,5,7] #物体体积
v = [1,5,6,9] #物体的价值
n = len(w)
dp = [[0 for i in range(c+1)]for j in range(1+n)] #创建一个n*c的零矩阵
w.insert(0,0) #因为dp表上次和左侧各有一列0,为了索引对齐
v.insert(0,0) #在0位置加个0,相当于在v的0位置加个0 ,即1前加0
for i in range(1,n+1):for j in range(1,c+1):if w[i] <= j: #物体体积小于背包体积时,有两种情况:
#要么是前一个装完最大,要么是装完现在这个还可以装其他的。dp[i][j] = max (dp[i-1][j],dp[i][j-w[i]] + v[i]) #与0-1不同的点就在这里else:dp[i][j] = dp[i-1][j]
print("最大价值为",dp[n][c])
我们知道,0-1背包有路径,我们完全背包也得有路径才行。
这完全是一样的,就是我们从后面往前推,不需要前一行的值。
c = 10 #背包容量
w = [3,4,5,7] #物体体积
v = [1,5,6,9] #物体的价值
n = len(w)
dp = [[0 for i in range(c+1)]for j in range(1+n)] #创建一个n*c的零矩阵
w.insert(0,0) #因为dp表上次和左侧各有一列0,为了索引对齐
v.insert(0,0) #在0位置加个0,相当于在v的0位置加个0 ,即1前加0
for i in range(1,n+1):for j in range(1,c+1):if w[i] <= 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])def get_path(dp,w,c):i = len(w)-1 #选中的物体j = c #背包的容量res = []while i != 0 and j != 0: #上面的dp表0行和0列都等于0,所以我们只要索引到它即可if dp[i][j] == dp[i-1][j]:i -= 1else:res.append(i-1) #上边w,v都加了0,索引的时候减一,不然会出现0,会误导结果j -= w[i] #背包面积减去装的物体,得到那时的背包体积res.sort()return res
print("背包物品索引为",get_path(dp,w,c))
dp 完全背包问题python相关推荐
- 动态规划(DP)的整理-Python描述
今天整理了一下关于动态规划的内容,道理都知道,但是python来描述的方面参考较少,整理如下,希望对你有所帮助,实验代码均经过测试. 请先好好阅读如下内容–什么是动态规划? 摘录于<算法图解&g ...
- 动态规划-b站up主正月点灯笼DP教程代码python+java版
动态规划-b站up主正月点灯笼DP教程代码python+java版 https://www.bilibili.com/video/BV12W411v7rd up:正月点灯笼 test01 选出数组中不 ...
- 背包DP | 完全背包问题
完全背包问题:有n种物品,每一件的物品重量为 w[ i ],价值为 c[ i ].现有一个容量为V的背包 (背包的最大承重为V),问如何选取物品放入背包,使得背包内物品的总价值最大,最大为多少?(每一 ...
- dp 动态规划 01背包问题 Python
参考学习网址: https://www.bilibili.com/video/av33930433?from=search&seid=10637513335818789097 https:// ...
- 0-1背包问题python实现
0-1背包问题 ACWings题目链接:https://www.acwing.com/problem/content/2/ 不会的小伙伴可以看一下视频:https://www.bilibili.com ...
- dpresult在python中什么意思_动态规划(DP)的整理-Python描述
今天整理了一下关于动态规划的内容,道理都知道,但是python来描述的方面参考较少,整理如下,希望对你有所帮助,实验代码均经过测试. 请先好好阅读如下内容--什么是动态规划? 摘录于<算法图解& ...
- poj3624 Charm Bracelet DP 01背包问题
题目链接:http://poj.org/problem?id=3624 01背包问题,接触DP的第一题. 1 ///2014.4.10 2 ///poj3624 3 4 #include <io ...
- python 完全背包问题_动态规划——背包问题python实现(01背包、完全背包、多重背包)...
参考: 描述: 有N件物品和一个容量为V的背包. 第i件物品的体积是vi,价值是wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包流量,且总价值最大. 二维动态规划 f[i][j] 表示只 ...
- 动态规划:线性dp、背包问题、区间3
区间DP 2955 -- Brackets 给定一个由字符 a1a2 ... an 组成的括号序列,你的目标是找到最长的正则括号序列的长度,它是 s 的子序列.也就是说,您希望找到最大的 m,使得对于 ...
- 背包问题 python 背包九讲
基础:01背包 t,m=list(map(int,input().split())) baowu=[None] ditu=[[0]*(t+1) for _ in range(m+1)] for i i ...
最新文章
- 如何基于消息中间件实现分布式事务?万字长文给你答案!!
- OCR文字识别软件的快速任务功能如何用
- 上传文件重命名后,下载时,用文件原名,不用Guid命名
- 9.3 图像变换(尺寸变换、旋转变换、灰度变换和数据类型变换)
- 7-27 兔子繁衍问题(15 分)
- solr的空间查询(查询地图周围坐标)
- python界面-python 可视化界面
- winform打包应用程序-setup安装包
- java数据过载_java区分过载的方法
- tfs java_Jenkins TFS集成
- xtend怎么使用_Xtend 2.3 Beta到来–为另一种JVM语言腾出空间
- Dojo.Book中文版
- checkbox选中属性
- Centos7安装php7.4
- uva714-复制书稿
- EVO 轨迹误差分析
- 编写一个完整的矩阵向量乘法的MPI编程代码
- 光标 换为 自定义图片
- Java调用python项目实战
- 解决兄弟打印机在加入墨粉后如何清零问题