浅析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 流程控制实例代码
Sep 25 Python
Python实现的数据结构与算法之链表详解
Apr 22 Python
Python实现购物程序思路及代码
Jul 24 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
Linux下多个Python版本安装教程
Aug 15 Python
python实现zabbix发送短信脚本
Sep 17 Python
Python配置文件处理的方法教程
Aug 29 Python
python实现广度优先搜索过程解析
Oct 19 Python
python函数中将变量名转换成字符串实例
May 11 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
Python用户自定义异常的实现
Dec 25 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 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进行MySQL删除记录操作代码
2008/06/07 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
深入理解PHP内核(一)
2015/11/10 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
浅谈js中的bind
2019/03/18 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
Python常用模块用法分析
2014/09/08 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
Python入门学习指南分享
2018/04/11 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
python 经典数字滤波实例
2019/12/16 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
python 如何上传包到pypi
2020/12/24 Python
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
装饰资料员岗位职责
2013/12/30 职场文书
生产车间班组长岗位职责
2014/01/06 职场文书
请假条标准格式规范
2014/04/10 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
给校长的建议书300字
2014/05/16 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
同意转租证明
2015/06/24 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL