浅析python实现动态规划背包问题


Posted in Python onDecember 31, 2020

一个包可以背4kg的东西,现在有四件东西,重量分别为1kg,4kg,3kg,1kg,价值为:1500,3000,2000,2000;

现在要求你,在包里背的东西价值最大,但是不能超过背包的最大载重量

#几件物品的重量
w = [0,1,4,3,1]
#几件物品的价值
v= [0, 1500, 3000, 2000, 2000]
#物品数量
n = len(w) - 1
#包的载重量
m = 4
 
#建立一个列表表示在包中的物品,元素是True时代表对应元素放入
x = [] 
#放入包中的总价值
value = 0
#建立一个矩阵,来表示在前i个物品中,当载重量是j时,放入包中的最大价值,table[i][j]
table = [[0 for i in range(m+1)] for j in range(n+1)]
 
def dynamic(w,v,n,m,x):
 #计算table矩阵
 for i in range(1, n+1): #代表物品一件一件的考虑
  for j in range(1, m+1):  #代表子背包的大小一点一点的考虑
   if (j >= w[i]): #当背包的大小大于物品的重量时,考虑放进去
    table[i][j] = max(table[i-1][j], table[i-1][j-w[i]] + v[i])
   else:
    table[i][j] = table[i -1][j] #如果放不进去,就继承之前的价值
    
 #递推装入背包中的物体,寻找跳变的地方,从最后结果开始逆推
 j = m
 for i in range(n, 0, -1):
  if table[i][j] > table[i- 1][j]: #如果多加一件物品之后,价值增大,就将这一件物品加入列表中
   x.append(i)
   j = j - w[i] #此时为剩余背包的载重量
   
 #返回最大价值,即表格中最后一行最后一列的值
 value = table[n][m]
 return value
 
print("最大价值为:", str(dynamic(w, v, n, m, x)))
print("物品的索引:", x)

PS:python动态规划之背包问题

import numpy as np
def bag(weight,values,weight_cont):
 num = len(weight)
 weight.insert(0,0)
 values.insert(0,0)
 bag = np.zeros((num+1,weight_cont+1),dtype=np.int)
 for i in range(1,num+1):
  for j in range(1,weight_cont+1):
   if j >= weight[i]:
    bag[i][j] = max(bag[i-1][j],bag[i-1][j-weight[i]]+values[i])
   else:
    bag[i][j] = bag[i][j-1]
 return bag[-1][-1]
if __name__ == '__main__':
 weight = [1, 2, 4, 10, 12]
 values = [1200, 1500, 2000, 1300, 2500]
 weight_cont = 20
 re = bag(weight,values,weight_cont)
 print(re)

到此这篇关于python实现动态规划背包问题的文章就介绍到这了,更多相关python动态规划背包内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python装饰器使用实例:验证参数合法性
Jun 24 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
May 25 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
python之文件读取一行一行的方法
Jul 12 Python
Python2与Python3的区别实例总结
Apr 17 Python
python pandas cumsum求累计次数的用法
Jul 29 Python
Python3离线安装Requests模块问题
Oct 13 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
opencv python如何实现图像二值化
Feb 03 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
python中doctest库实例用法
Dec 31 #Python
Python项目打包成二进制的方法
Dec 30 #Python
Python 实现RSA加解密文本文件
Dec 30 #Python
python之随机数函数的实现示例
Dec 30 #Python
利用Python实现学生信息管理系统的完整实例
Dec 30 #Python
使用gunicorn部署django项目的问题
Dec 30 #Python
pyspark对Mysql数据库进行读写的实现
Dec 30 #Python
You might like
解析crontab php自动运行的方法
2013/06/24 PHP
php使用codebase生成随机数
2014/03/25 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
python验证身份证信息实例代码
2019/05/06 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
python批量修改文件名的示例
2020/09/27 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
英国现代市场:ARKET
2019/04/10 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
技术总监的工作职责
2013/11/13 职场文书
行政助理的职责
2013/11/14 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
教师对学生的寄语
2014/04/03 职场文书
万能检讨书2000字
2014/10/17 职场文书
2015年百日安全活动总结
2015/03/26 职场文书