浅析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使用htmllib分析网页内容的方法
May 08 Python
详解Django通用视图中的函数包装
Jul 21 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
python中logging模块的一些简单用法的使用
Feb 22 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 Python
python的pytest框架之命令行参数详解(下)
Jun 27 Python
Python socket非阻塞模块应用示例
Sep 12 Python
使用django和vue进行数据交互的方法步骤
Nov 11 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
Python 忽略文件名编码的方法
Aug 01 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
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 SDK之微信公众号支付代码详解
2015/12/09 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
javascript iframe编程相关代码
2009/12/28 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
python整小时 整天时间戳获取算法示例
2019/02/20 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
python爬虫 requests-html的使用
2020/11/30 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
Linux文件操作命令都有哪些
2015/02/27 面试题
回门宴新郎答谢词
2014/01/12 职场文书
大学军训感言600字
2014/02/25 职场文书
爱护公共设施的标语
2014/06/24 职场文书
新党章心得体会
2014/09/04 职场文书
酒桌上的开场白
2015/06/01 职场文书
创业计划之特色精品店
2019/08/12 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
ES6 解构赋值的原理及运用
2021/05/25 Javascript
MySQL分库分表详情
2021/09/25 MySQL
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android