浅析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 从远程服务器下载东西的代码
Feb 10 Python
python实现apahce网站日志分析示例
Apr 02 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Django中的cookie和session
Aug 27 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
序列化Python对象的方法
Aug 01 Python
python -v 报错问题的解决方法
Sep 15 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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
快速配置PHPMyAdmin方法
2008/06/05 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
犀利的js 函数集合
2009/06/11 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
理解Python中函数的参数
2015/04/27 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
python 网络编程常用代码段
2016/08/28 Python
numpy自动生成数组详解
2017/12/15 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
学习全国两会精神心得体会范文
2014/03/17 职场文书
小学生综合素质评语
2014/04/23 职场文书
唐山大地震的观后感
2015/06/05 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
pytorch--之halfTensor的使用详解
2021/05/24 Python