题目描述
有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。
第 i 种物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
输入格式
第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。
接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。
输出格式
输出一个整数,表示最大价值。
4 5
1 2
2 4
3 4
4 5
10
提示
【样例解释 1】
- 可以选择 1 个物品1 和 2 个物品2
- 总体积为:1 * 1 + 2 * 2 = 5
- 总价值为:1 * 2 + 2 * 4 = 10
请思考后再点击查看提示
- 状态设计:dp(i,j) 表示从前 i 个物品中选出体积不超过 j 的物品时的最大价值
- 状态转移
$$\begin{equation}
dp(i,j) = \left\{
\begin{array}{lr}
dp(i-1,j), & 不使用第i个物品 \\
dp(i,j-v(i))+w(i), & 使用第i个物品
\end{array}
\right.
\end{equation}$$
- 注意,当使用使用第 i 个物品时
- dp(i−1,j−v(i))+w(i),01背包
- dp(i,j−v(i))+w(i),完全背包
数据规模与限制
- 0<N≤1000,0<V≤3000
- 0<vi,wi≤1000
来源