python动态规划算法的使用过程
- 更新时间:2021-08-01 10:00:34
- 编辑:越霓云
我们帮大家精选了相关的编程文章,网友焦尔槐根据主题投稿了本篇教程内容,涉及到Python相关内容,已被521网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。
参考资料
- Selenium3自动化测试实战:基于Python语言 PDF 电子书 / 99.55 MB / 虫师 推荐度:
- 一起学Python PDF 电子书 / 11.4 MB / Yashavant Kanetkar 推荐度:
- Python金融大数据分析 PDF 电子书 / 47.8 MB / 希尔皮斯科 推荐度:
- Django实战:Python Web典型模块与项目开发 PDF 电子书 / 58 MB / 张晓 推荐度:
- Selenium 2自动化测试实战:基于Python语言 PDF 电子书 / 44 MB / 虫师 推荐度:
正文内容
码农之家最近发表了一篇名为《python动态规划算法的使用过程》的py文章,好东西应该跟大家分享,重新编辑了一下发到本站,为了方便大家的阅读。
1、使用过程
获取相应信息(商品数量、背包容积、各商品体积和价值)
结构的最佳值矩阵。
初始化的最佳值矩阵(上方和左侧留有空白矩阵作为后续运算,但没有结果)
根据商品之间的最佳价值公式计算出相应的结果。
逆向推导矩阵得到某个商品,或者没有安装。
输出结果。
2、实例
print('请输入待装物品数量和背包体积(空格隔开):') n, v = map(int, input().split()) # 获取物品数量和背包体积 goods = [] # 初始化商品列表 for i in range(n): print(f'请输入第{i + 1}个物品的重量和价值(空格隔开):') goods.append(list(map(int, input().split()))) # 获取商品信息 # 计算最优值矩阵 dp = [[0 for i in range(v + 1)] for j in range(n + 1)] # 初始化最优值矩阵 for i in range(1, n + 1): for j in range(1, v + 1): dp[i][j] = dp[i - 1][j] # 默认不装,即和上一项最优值相等 if j >= goods[i - 1][0]: # 如果背包剩余空间充足 dp[i][j] = max(dp[i][j], dp[i - 1][j - goods[i - 1][0]] + goods[i - 1][1]) # 对比装与不装的价值并选择较大值 """ # 输出最优值矩阵 for i in dp: print(i) """ # 计算最优解 x = [0 for i in range(n + 1)] # 初始化物品状态,0:不装,1:装 for i in range(n, 0, -1): if dp[i][v] == dp[i - 1][v]: # 判断最优值是否发生变化,如果没有变化,则说明没有装 x[i] = 0 # 不装 else: # 如果有变化,则说明装了,并减去对应重量 x[i] = 1 # 装 v -= goods[i - 1][0] # 减去对应重量 x[n] = 1 if dp[n][v] != 0 else 0 # 判断最后一个物品装不装 # 输出最优解 print('背包应装物品为:') for i in range(1, n + 1): print(f'编号:{str(i)}\t重量:{goods[i - 1][0]}\t价值:{goods[i - 1][1]}\n' if x[i] == 1 else '', end='') # 输出最优值 print('最大物品价值:', dp[-1][-1])
以上就是python动态规划算法的使用过程,希望对大家有所帮助。
相关教程
-
教你一招用Python破解斗地主残局
斗地主应该对大家来说都不陌生,下面这篇文章主要跟大家分享了关于利用Python破解斗地主残局的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看
发布时间:2019-07-11
-
用python处理MS Word的实例讲解
今天小编就为大家分享一篇用python处理MS Word的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
发布时间:2019-08-26