浅析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使用7z解压apk包的方法
Apr 18 Python
Python中利用sorted()函数排序的简单教程
Apr 27 Python
Python中设置变量访问权限的方法
Apr 27 Python
python实现RSA加密(解密)算法
Feb 17 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
python编程羊车门问题代码示例
Oct 25 Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
PyQt5实现画布小程序
May 30 Python
python归并排序算法过程实例讲解
Nov 04 Python
请求模块urllib之PYTHON爬虫的基本使用
Apr 08 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
php 正则匹配函数体
2009/08/25 PHP
php实现微信公众号无限群发
2015/10/11 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
Python用input输入列表的实例代码
2020/02/07 Python
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
全球虚拟主机商:HostGator
2017/02/06 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
SQL Server面试题
2016/10/17 面试题
幼师自荐信
2013/10/26 职场文书
应聘编辑职位自荐信范文
2014/01/05 职场文书
学校联谊活动方案
2014/02/15 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
师德师风个人整改措施
2014/10/27 职场文书
东京审判观后感
2015/06/01 职场文书
销售人员管理制度
2015/08/06 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
Python中rapidjson参数校验实现
2021/07/25 Python
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫
mysql查看表结构的三种方法总结
2022/07/07 MySQL