我们今天来学习完全背包问题,完全背包问题是基于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相关推荐

  1. 动态规划(DP)的整理-Python描述

    今天整理了一下关于动态规划的内容,道理都知道,但是python来描述的方面参考较少,整理如下,希望对你有所帮助,实验代码均经过测试. 请先好好阅读如下内容–什么是动态规划? 摘录于<算法图解&g ...

  2. 动态规划-b站up主正月点灯笼DP教程代码python+java版

    动态规划-b站up主正月点灯笼DP教程代码python+java版 https://www.bilibili.com/video/BV12W411v7rd up:正月点灯笼 test01 选出数组中不 ...

  3. 背包DP | 完全背包问题

    完全背包问题:有n种物品,每一件的物品重量为 w[ i ],价值为 c[ i ].现有一个容量为V的背包 (背包的最大承重为V),问如何选取物品放入背包,使得背包内物品的总价值最大,最大为多少?(每一 ...

  4. dp 动态规划 01背包问题 Python

    参考学习网址: https://www.bilibili.com/video/av33930433?from=search&seid=10637513335818789097 https:// ...

  5. 0-1背包问题python实现

    0-1背包问题 ACWings题目链接:https://www.acwing.com/problem/content/2/ 不会的小伙伴可以看一下视频:https://www.bilibili.com ...

  6. dpresult在python中什么意思_动态规划(DP)的整理-Python描述

    今天整理了一下关于动态规划的内容,道理都知道,但是python来描述的方面参考较少,整理如下,希望对你有所帮助,实验代码均经过测试. 请先好好阅读如下内容--什么是动态规划? 摘录于<算法图解& ...

  7. poj3624 Charm Bracelet DP 01背包问题

    题目链接:http://poj.org/problem?id=3624 01背包问题,接触DP的第一题. 1 ///2014.4.10 2 ///poj3624 3 4 #include <io ...

  8. python 完全背包问题_动态规划——背包问题python实现(01背包、完全背包、多重背包)...

    参考: 描述: 有N件物品和一个容量为V的背包. 第i件物品的体积是vi,价值是wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包流量,且总价值最大. 二维动态规划 f[i][j] 表示只 ...

  9. 动态规划:线性dp、背包问题、区间3

    区间DP 2955 -- Brackets 给定一个由字符 a1a2 ... an 组成的括号序列,你的目标是找到最长的正则括号序列的长度,它是 s 的子序列.也就是说,您希望找到最大的 m,使得对于 ...

  10. 背包问题 python 背包九讲

    基础:01背包 t,m=list(map(int,input().split())) baowu=[None] ditu=[[0]*(t+1) for _ in range(m+1)] for i i ...

最新文章

  1. 如何基于消息中间件实现分布式事务?万字长文给你答案!!
  2. OCR文字识别软件的快速任务功能如何用
  3. 上传文件重命名后,下载时,用文件原名,不用Guid命名
  4. 9.3 图像变换(尺寸变换、旋转变换、灰度变换和数据类型变换)
  5. 7-27 兔子繁衍问题(15 分)
  6. solr的空间查询(查询地图周围坐标)
  7. python界面-python 可视化界面
  8. winform打包应用程序-setup安装包
  9. java数据过载_java区分过载的方法
  10. tfs java_Jenkins TFS集成
  11. xtend怎么使用_Xtend 2.3 Beta到来–为另一种JVM语言腾出空间
  12. Dojo.Book中文版
  13. checkbox选中属性
  14. Centos7安装php7.4
  15. uva714-复制书稿
  16. EVO 轨迹误差分析
  17. 编写一个完整的矩阵向量乘法的MPI编程代码
  18. 光标 换为 自定义图片
  19. Java调用python项目实战
  20. 解决兄弟打印机在加入墨粉后如何清零问题

热门文章

  1. Razer Synapse雷云本地提权漏洞的复现
  2. Html源码在线翻译,HTML – 谷歌翻译网站
  3. 华为荣耀6 root
  4. 阿铭Linux_公有云学习笔记20190116
  5. java面向接口编程思想
  6. 关键路径计算、总时差、自由时差
  7. 容差分析相关的计算公式
  8. vscode可以配置哪些编程语言_vscode支持哪些编程语言
  9. 请问ECSHOP首页站内快讯在哪里添加和修改?
  10. 从30天到17小时,如何让HSPICE仿真效率提升42倍?