浅析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连接oracle数据库实例
Oct 17 Python
python实现ping的方法
Jul 06 Python
Python自动扫雷实现方法
Jul 25 Python
带你了解python装饰器
Jun 15 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
浅谈Django REST Framework限速
Dec 12 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
Flask配置Cors跨域的实现
Jul 12 Python
django 扩展user用户字段inlines方式
Mar 30 Python
PyInstaller运行原理及常用操作详解
Jun 13 Python
零基础学Python之前需要学c语言吗
Jul 21 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 COOKIE设置为浏览器进程
2009/06/21 PHP
php session劫持和防范的方法
2013/11/12 PHP
php动态绑定变量的用法
2015/06/16 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
ASP SQL防注入的方法
2008/12/25 Javascript
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
Python中的lstrip()方法使用简介
2015/05/19 Python
Python变量和数据类型详解
2017/02/15 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
迟到早退检讨书
2014/02/10 职场文书
活动总结模板
2014/05/09 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
客房部经理岗位职责
2015/02/02 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP