Problem5565--多重背包问题 II

5565: 多重背包问题 II

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MiB

Description

本题为多重背包模板题。和多重背包问题 I 相比,本题扩大数据规模。如果使用最简单的多重背包时间复杂度为 $O(NVS)$,那么计算量达到 $N*V*S=(10^3)*(2*10^3)*(2*10^3)=4*10^9$,那么肯定是 TLE。因此本题需要使用二进制优化,这样时间复杂度变为 $O(N*V*logS)$。 有 $N$ 种物品和一个容量是 $V$ 的背包。
第 $i$ 种物品最多有 $s_i$ 件,每件体积是 $v_i$,价值是 $w_i$。
求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。
输出最大价值。

Input

第一行两个整数,$N\ (0 < N \leq 1000),\ V\ (0 < V \leq 2000)$,用空格隔开,分别表示物品种数和背包容积。
接下来有 $N$ 行,每行三个整数 $v_i,\ w_i,\ s_i\ (0 < v_i,\ w_i,\ s_i \leq 2000)$,用空格隔开,分别表示第 $i$ 种物品的体积、价值和数量。

Output

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

Sample 1 Input

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

Sample 1 Output

10

Source/Category

基础算法 4.123.多重背包