背包问题入门以及例题讲解

本文介绍了背包问题的基础模型,包括01背包和完全背包。针对01背包,通过例题分析了动态规划的解决方案,并给出模板题和推荐题。完全背包则允许每种物品无限数量,同样使用动态规划解决。文章包含多个具体实例的解题思路。
摘要由CSDN通过智能技术生成

Part 1 01背包:

基础模型:

我们先来看一道例题。

一个旅行商有一个容量为 V V V 的背包,现在有 n n n 个物品,每个物品的体积为 v i v_i vi,价值为 c i c_i ci,旅行商想知道,在不超过背包容量的情况下,取一些物品,他能获得的最大价值是多少。注意每个物品只有一件。

思路:

首先,按平常的思维,选取性价比更高的物品是较优的。但是在这个问题中,这种思维显然是不对的,因为物品不可分割,选取性价比高的有可能不能充分利用背包的容量,如这个输入例子:

V:8 n:3
5 5
4 3
4 3

按照贪心思路,第一件物品性价比最高,但是取完后不能再取其他物品,贪心结果为: 5 5 5.

显然,若选取物品 2 2 2 3 3 3,体积总和为 8 8 8,价值总和为 6 6 6,满足背包容量,答案更优,为 6 6 6.

因此,贪心是错误的。(但是在这题是可以用贪心解决的,因为物品可分割)

考虑动态规划。

f i , j f_{i,j} fi,j 表示取前 i i i 个物品,目前体积和为 j j j 的情况下,最大价值是多少。

因为每种物品只有选或不选两个状态,若选,如果 j ≥ v i j\ge v_i jvi 就可从 f i − 1 , j − v i + c i f_{i-1,j-v_i}+c_i fi1,jvi+ci 转移而来,若不选,可从 f i − 1 , j f_{i-1,j} fi1,j 中转移而来,最终转移结果即为这两者的最大值,即 f i , j = max ⁡ { f i − 1 , j − v i

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值