浅析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 相关文章推荐
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
May 16 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
python之django母板页面的使用
Jul 03 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
django url到views参数传递的实例
Jul 19 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
pycharm无法导入本地模块的解决方式
Feb 12 Python
python实现密码强度校验
Mar 18 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 Python
Python list去重且保持原顺序不变的方法
Apr 03 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
第十三节 对象串行化 [13]
2006/10/09 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
Python简单读取json文件功能示例
2017/11/30 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
python算的上脚本语言吗
2020/06/22 Python
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
统计员岗位职责
2013/11/14 职场文书
教师申诉制度
2014/01/29 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
单位实习鉴定评语
2015/01/04 职场文书
消夏晚会主持词
2015/06/30 职场文书
python实现简单倒计时功能
2021/04/21 Python
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS
python_tkinter弹出对话框创建
2022/03/20 Python
Github 使用python对copilot做些简单使用测试
2022/04/14 Python