浅析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 pass 语句使用示例
Mar 11 Python
Python实现的一个自动售饮料程序代码分享
Aug 25 Python
Python简单格式化时间的方法【strftime函数】
Sep 18 Python
python编程培训 python培训靠谱吗
Jan 17 Python
python @property的用法及含义全面解析
Feb 01 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
kaggle+mnist实现手写字体识别
Jul 26 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
Python Unittest根据不同测试环境跳过用例的方法
Dec 16 Python
如何用python处理excel表格
Jun 09 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 Python
python创建字典及相关管理操作
Apr 13 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
初级的用php写的采集程序
2007/03/16 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
关于尾递归的使用详解
2013/05/02 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php使用session二维数组实例
2014/11/06 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
jqPlot Option配置对象详解
2009/07/25 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
python列表的增删改查实例代码
2018/01/30 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
python3 求约数的实例
2019/12/05 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
安全检查验收制度
2014/01/12 职场文书
校园文化建设方案
2014/02/03 职场文书
工作决心书范文
2014/03/11 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
获奖感言范文
2015/07/31 职场文书
关于Redis的主从复制及哨兵问题
2022/06/16 Redis