Python基于动态规划算法解决01背包问题实例


Posted in Python onDecember 06, 2017

本文实例讲述了Python基于动态规划算法解决01背包问题。分享给大家供大家参考,具体如下:

在01背包问题中,在选择是否要把一个物品加到背包中,必须把该物品加进去的子问题的解与不取该物品的子问题的解进行比较,这种方式形成的问题导致了许多重叠子问题,使用动态规划来解决。n=5是物品的数量,c=10是书包能承受的重量,w=[2,2,6,5,4]是每个物品的重量,v=[6,3,5,4,6]是每个物品的价值,先把递归的定义写出来:

Python基于动态规划算法解决01背包问题实例

然后自底向上实现,代码如下:

def bag(n,c,w,v):
  res=[[-1 for j in range(c+1)] for i in range(n+1)]
  for j in range(c+1):
    res[0][j]=0
  for i in range(1,n+1):
    for j in range(1,c+1):
      res[i][j]=res[i-1][j]
      if j>=w[i-1] and res[i][j]<res[i-1][j-w[i-1]]+v[i-1]:
        res[i][j]=res[i-1][j-w[i-1]]+v[i-1]
  return res
def show(n,c,w,res):
  print('最大价值为:',res[n][c])
  x=[False for i in range(n)]
  j=c
  for i in range(1,n+1):
    if res[i][j]>res[i-1][j]:
      x[i-1]=True
      j-=w[i-1]
  print('选择的物品为:')
  for i in range(n):
    if x[i]:
      print('第',i,'个,',end='')
  print('')
if __name__=='__main__':
  n=5
  c=10
  w=[2,2,6,5,4]
  v=[6,3,5,4,6]
  res=bag(n,c,w,v)
  show(n,c,w,res)

输出结果如下:

Python基于动态规划算法解决01背包问题实例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中Django框架利用url来控制登录的方法
Jul 25 Python
python中zip()方法应用实例分析
Apr 16 Python
Python实现文件复制删除
Apr 19 Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
基于数据归一化以及Python实现方式
Jul 11 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
python dir函数快速掌握用法技巧
Dec 09 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 Python
Python Flask实现进度条
May 11 Python
Python机器学习之决策树算法实例详解
Dec 06 #Python
快速入门python学习笔记
Dec 06 #Python
Python中django学习心得
Dec 06 #Python
Python标准库inspect的具体使用方法
Dec 06 #Python
读取本地json文件,解析json(实例讲解)
Dec 06 #Python
Python语言描述最大连续子序列和
Dec 05 #Python
python matplotlib坐标轴设置的方法
Dec 05 #Python
You might like
收音机术语解释
2021/03/01 无线电
PHP实现的比较完善的购物车类
2014/12/02 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
javascript知识点收藏
2007/02/22 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
Python读写ini文件的方法
2015/05/28 Python
编写Python CGI脚本的教程
2015/06/29 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
tensorflow 获取变量&amp;打印权值的实例讲解
2018/06/14 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
益模软件Java笔试题
2012/03/27 面试题
社会实践自我鉴定
2013/11/07 职场文书
美食节策划方案
2014/05/26 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
铣工实训报告
2014/11/05 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
单位证明范文
2015/06/18 职场文书
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js