浅析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使用多线程不断刷新网页的方法
Mar 31 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
Python3使用requests登录人人影视网站的方法
May 11 Python
Python中super函数的用法
Nov 17 Python
Python内置函数delattr的具体用法
Nov 23 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
简单了解Python matplotlib线的属性
Jun 29 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Apr 04 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
php array_filter除去数组中的空字符元素
2020/06/21 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
简单实现js放大镜效果
2017/07/24 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
低版本中Python除法运算小技巧
2015/04/05 Python
python处理大数字的方法
2015/05/27 Python
详解Swift中属性的声明与作用
2016/06/30 Python
Python解惑之整数比较详解
2017/04/24 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
大学生求职简历的自我评价
2013/10/14 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
2015年大学生实习评语
2015/03/25 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python