0--1背包问题(动态规划)

本文详细介绍了如何使用动态规划解决0--1背包问题。通过举例说明,解释了如何确定物品是否放入背包以达到背包能装入物品的最大价值,并提供了相应的C++代码实现。
摘要由CSDN通过智能技术生成

1、问题描述

     给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大?

例子:数据:物品个数n=5,物品重量w[n]={0,2,2,6,5,4},物品价值V[n]={0,6,3,5,4,6}

下面是算法分析的过程:

      其实这里就是选择装与不装的问题关键

  (1)对于m[5][j],当j<w[5]时,物品5不能放入背包中,此时背包的价值为0。当j>=w[5]时,物品5可以放入背包,此时背包的价值为v[5]。得到结果如下表:       
         W            i        0         1        2          3          4         5           6           7         8          9           10         V

2 1                       6
2 2                       3
6 3                       5
5 4
                  4
4 5 0
0
0 0
6 6 6 6 6 6 6 6
       (2)在物品5的基础上分析物品4,

  当j<w[4]时,物品4不能放入,此时背包的最大价值为m[4+1][j];即m[4][0..4]=m[5][0..4]

  当j>=w[4]时,物品4要么放入要么不放入。当物品4放入背包后,对于物品4+1到n,能达到的最大价值为m[4+1][j-w[4]]+v[4],故此时能达到的最大价值为m[4+1][j-w[4]]+v[4]

  当物品4不放入背包时,能达到的最大价值为m[4+1][j]。最后比较放入与不放入情况下,两者的最大值取其大者,分析结果如上表的橙色:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值