浅析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 相关文章推荐
详解Django框架中用户的登录和退出的实现
Jul 23 Python
Python制作简易注册登录系统
Dec 15 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
python实现员工管理系统
Jan 11 Python
python 常用的基础函数
Jul 10 Python
Django框架实现的简单分页功能示例
Dec 04 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
Python使用type动态创建类操作示例
Feb 29 Python
python语言是免费还是收费的?
Jun 15 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 Python
Python使用BeautifulSoup4修改网页内容
May 20 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 5.0 Pear安装方法
2006/12/06 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
php include和require的区别深入解析
2013/06/17 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
在Python中使用第三方模块的教程
2015/04/27 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
Python帮你识破双11的套路
2019/11/11 Python
Python grpc超时机制代码示例
2020/09/14 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
2014年感恩母亲演讲稿
2014/05/27 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
环保建议书作文500字
2015/09/14 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis