浅析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中管道用法入门实例
Jun 04 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
对python3标准库httpclient的使用详解
Dec 18 Python
python算法与数据结构之冒泡排序实例详解
Jun 22 Python
解决Django连接db遇到的问题
Aug 29 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 Python
python学习将数据写入文件并保存方法
Jun 07 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
PyTorch中permute的使用方法
Apr 26 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
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
JavaScript模块详解
2017/12/18 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
Python的Django框架中的Context使用
2015/07/15 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
区域总监的岗位职责
2013/11/21 职场文书
学生鉴定评语大全
2014/05/05 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
记者节感言
2015/08/03 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
Python机器学习之PCA降维算法详解
2021/05/19 Python