跳到主要内容

动态规划之四——0-1背包

一、问题引入

情景案例
探险家携带容量为V的背包进入洞穴,发现n件宝物,第i件宝物体积为w[i],价值为v[i]。每件宝物只能选择拿或不拿,求能获得的最大总价值。

问题简化
给定:

  • 背包容量 V
  • 物品数量 n
  • 物品体积数组 w[1..n]
  • 物品价值数组 v[1..n]

求:

  • 选择物品的子集,满足Σw[i] ≤ V,且Σv[i]最大

二、动态规划解法

思考以下用深搜怎么解?

三、思考:

  • 用一维dp为什么要逆序枚举?
  • 正序会导致物品被重复选取
  • 逆序保证每个物品只被考虑一次
  • 如果每个物品的数量不限呢?(完全背包)

扩展练习:

01背包

  1. [NOIP2005 普及组] 采药
  2. [NOIP2006 普及组] 开心的金明
  3. 5 倍经验日

完全背包

  1. 疯狂的采药
  2. [CSP-J2019] 纪念品
  3. 赛斯石(赛后强化版)

多重背包

  1. 宝物筛选
  2. [NOI Online #3 入门组] 买表

混合背包

  1. 樱花
  2. [USACO06DEC] Cow Roller Coaster S
  3. [NOIP2014 提高组] 飞扬的小鸟

*学习笔记

暂没有学习笔记,快来抢first blood !