浅析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实现BT种子和磁力链接的相互转换
Nov 09 Python
Python基础篇之初识Python必看攻略
Jun 23 Python
Python 处理数据的实例详解
Aug 10 Python
python实现剪切功能
Jan 23 Python
Django 全局的static和templates的使用详解
Jul 19 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
深入了解Python在HDA中的应用
Sep 05 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
Django中的session用法详解
Mar 09 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
常用的10个Python实用小技巧
Aug 10 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 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中for循环语句的几种变型
2007/03/16 PHP
优化PHP程序的方法小结
2012/02/23 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
音乐教学随笔感言
2014/02/19 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
建筑安全责任书范本
2014/07/24 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
借钱欠条怎么写
2015/07/03 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis