动态规划法解决0/1背包问题详解

本文详细介绍了动态规划法解决0/1背包问题的思路和步骤,包括问题描述、分析、求解示例及代码实现。通过实例演示如何逐步放入物品,以达到背包总价值最大化,最后总结了解决此类问题的关键点。
摘要由CSDN通过智能技术生成

强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan

是什么

         动态规划(dynamic programming)是求解决策过程最优化的数学方法,把多阶段过程转换为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法。

基本思想

          将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

求解步骤

  1. 找出最优解的性质,刻画出结构特征
  2. 递归的定义最优解的值
  3. 自底向上的方式计算最优值(例如0/1背包问题将价值从低到高排序,再依次像背包中放入,调整)
  4. 根据最优值构造最优解(求出哪些物品放在了背包中,标记为1,否则标记为0)

0-1背包问题

问题描述

         现在有5个物品,第i个物品的价值为vi,重量为wi,背包的容量为W,其中的参数都为非负数,W=17。求解如何放物品使得背包的总价值最大。假设我们将物品的价值从低到高排好序如下表:

  

物品的价值和重量
物品编号 1 2 3 4 5
价值v 4 5 10 11 13
重量w 3 4 7 8 9


 

问题分析

  • 尝试将1号物品放入背包

            1号物品重量为3,我们先将背包分成从0到17,共18份,当背包容量是0时,物品1无法放入背包,所以最大价值为0,依次类推,当背包的容量为3时,刚好可以将1号物品放入背包,则此时背包中最大价值为4(即为物品1的价值,位置为下表格标红处),背包容量依次增大到17,背包中还是盛放1号物品,所以,将1号物品放入背包的最大价值为4。

动态规划法示例
 I\W   0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
1 0 0 0 4 4 4
评论 71
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值