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脚本实现Web漏洞扫描工具
Oct 25 Python
Python守护线程用法实例
Jun 23 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
python实现归并排序算法
Nov 22 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
Django 大文件下载实现过程解析
Aug 01 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
Django实现内容缓存实例方法
Jun 30 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
Python实现仓库管理系统
May 30 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
Mysql的常用命令
2006/10/09 PHP
无数据库的详细域名查询程序PHP版(5)
2006/10/09 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
laravel-admin 实现在指定的相册下添加照片
2019/10/21 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
Python中有趣在__call__函数
2015/06/21 Python
python语言使用技巧分享
2016/05/31 Python
Python中存取文件的4种不同操作
2018/07/02 Python
python实现五子棋小程序
2019/06/18 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
小型女装店的创业计划书
2014/01/09 职场文书
晚宴邀请函范文
2014/01/15 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
幼儿园新年寄语
2014/04/03 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书
教师工作表现自我评价
2015/03/05 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript