100
#LS1084. 【入门】多重背包

【入门】多重背包

题目描述

NN 种物品和一个容量是 VV 的背包。

ii 种物品最多有 sis_i,每件体积是 viv_i,价值是 wiw_i

求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。

输入格式

第一行两个整数,NVN,V,用空格隔开,分别表示物品种数和背包容积。

接下来有 NN 行,每行三个整数 vi,wi,siv_i, w_i, s_i,用空格隔开,分别表示第 ii 种物品的体积、价值和数量。

输出格式

输出一个整数,表示最大价值。

4 5
1 2 3
2 4 1
3 4 3
4 5 2
10

提示

【样例解释 1】

  • 可以选择 3 个物品1 和 1 个物品2
  • 总体积为:3 * 1 + 1 * 2 = 5
  • 总价值为:3 * 2 + 1 * 4 = 10
请思考后再点击查看提示
  • 本题考查多重背包的 二进制优化 方法
  • 假设某个物品的数量是 10,体积是 vv,价值是 ww
  • 将 10 表示成 10=20+21+22+3=1+2+4+310=2^0+2^1+2^2+3=1+2+4+3
  • 我们可以将这个物品拆分成 4 个物品
    • 物品 1:体积 1 * v,价值 1 * w
    • 物品 2:体积 2 * v,价值 2 * w
    • 物品 3:体积 4 * v,价值 4 * w
    • 物品 4:体积 3 * v,价值 3 * w
  • 不管原来的物品取了多少个,都可以有拆分成的新的 4 个物品组合而成
  • 因此,可以将所有的物品都按照上述方法拆分,然后做按 01背包求解

数据规模与限制

  • 0<N10000 \lt N \le 1000
  • 0<V20000 \lt V \le 2000
  • 0<vi,wi,si20000 \lt v_i, w_i, s_i \le 2000

来源