AcWing 4. 多重背包问题 I java
原题链接
简单
作者:
银河之力
,
2020-02-01 10:32:12
,
所有人可见
,
阅读 1327
样例
import java.util.Scanner;
/**
* Description:第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。
* 接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。
* 题目地址:https://www.acwing.com/problem/content/4/
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int N = sc.nextInt();
int V = sc.nextInt();
int v[] = new int[N + 1];
int w[] = new int[N + 1];
int s[] = new int[N + 1];
int f[][] = new int[N + 1][V + 1];
for (int i = 1; i < N + 1; i++) {
v[i] = sc.nextInt();
w[i] = sc.nextInt();
s[i] = sc.nextInt();
}
for (int i = 1; i <= N; i++) {
for (int j = V; j >= 0; j--) {
for (int k = 0; k <= s[i]; k++) {
if (j >= k * v[i]) {
f[i][j] = Math.max(f[i][j], f[i - 1][j - k * v[i]] + k * w[i]);
}
}
}
}
System.out.println(f[N][V]);
}
}
}