动态规划之0-1背包问题(简单易懂)

本文详细介绍了如何使用动态规划解决0-1背包问题,通过实例展示了如何填写表格,阐述了动态规划的思路,并给出了计算最大价值的公式。最后提供了改进方案和样例代码。
摘要由CSDN通过智能技术生成

动态规划之0-1背包问题

问题描述

现给定n种物品以及一容量为c的背包,物品具有质量和价值两个属性,物品i的质量为wi,价值为vi。问如何选择装入背包的物品,才能使得背包中物品的总价值最大?


问题分析

给定数据为背包容量c = 10, 物品种类n = 5, 物品质量w[n] = {2, 2, 6, 5, 4}, 物品价值v[n] = {6, 3, 5, 4, 6}。
要解决这个问题,只需要以某种形式填写下方这张表即可了解用动态规划解决0-1背包问题的思想。这张表的纵坐标[0, 10]所表示的是背包的容量,横坐标[1, 5]所表示的是物品的种类,为了后续的叙述方便,将表看作一个二维数组,并用小写字母d来表示。

重量w 价值v 0 1 2 3 4 5 6 7 8 9 10
1 2 6
2 2 3
3 6 5
4 5 4
5 4 6

说明
  • d[5][0]所表示的就是第5行第0列的位置,所代表的含义就是当背包容量为0时(只考虑5号物品),所能够形成的最大价值。
  • d[4][1]所表示的就是第4行第1列的位置,所代表的含义就是当背包容量为1时(考虑5号和4号物品),所能够形成的最大价值。
  • d[3][2]所表示的就是第3行第2列的位置,所代表的含义就是当背包容量为2时(考虑5号,4号和3号物品),所能够形成的最大价值。

填表

上文中我们已经知道了表格中空位置所代表的含义,填这张表之前,还有以下两点需要大家知道:
1. 这张表应该是由下至上,由左至右来进行填写的;
2. 对于每一种物品,只对应着两种状态,装入背包和不装入背包;
知道了以上信息后,便可以开始对这张表进行填写了。

  • 因为表的填写是由下至上,由左至右来进行填写,所以第一个填写的位置应该是d[5][0]位置,此时,背包的容量为0(只考虑5号物品),因为5号物品的重量w[5] = 4,容量为0背包不能够容纳重量为4的物品,所以d[5][0]位置所能形成的最大价值为0。
  • 同理,在d[5][1], d[5][2], d[5][3]这几个位置所能形成的最大价值也为0。
    此时表格变成如下所示:
重量w 价值v 0 1 2 3 4 5 6 7 8 9 10
1 2 6
2 2 3
3 6 5
4 5 4
5 4 6 0 0 0 0
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值