G. 【入门】二维费用背包

    传统题 1000ms 256MiB

【入门】二维费用背包

题目描述

NN 件物品和一个 容量是 VV 的背包,背包能承受的最大重量是 MM

每件物品只能用一次。体积是 viv_i,重量是 mim_i,价值是 wiw_i

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

输入格式

第一行三个整数,N,V,MN,V, M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。

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

输出格式

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

4 5 6
1 2 3
2 4 4
3 4 5
4 5 6
8

提示

【样例解释 1】

  • 可以选择 物品1 和 物品3
  • 总体积为:1 + 3 = 4 <= 5
  • 总重量为:2 + 4 = 6 <= 6
  • 总价值为:3 + 5 = 8
请思考后再点击查看提示
  • 状态设计:dp(i,j,k)dp(i,j,k) 表示前 ii 个物品,体检不超过 jj,重量不超过 kk 的情况下的最大价值
  • 状态转移:
$$\begin{equation} dp(i,j,k) = \left\{ \begin{array}{lr} dp(i-1,j,k), & 不使用第i个物品 \\ dp(i-1,j-v(j),k-m(j))+w(j), & 使用第i个物品 \end{array} \right. \end{equation}$$

数据规模与限制

  • 0<N10000 \lt N \le 1000
  • 0<V,M1000 \lt V, M \le 100
  • 0<vi,mi1000 \lt v_i, m_i \le 100
  • 0<wi10000 \lt w_i \le 1000

来源