题解 | #【模板】完全背包#
【模板】完全背包
https://www.nowcoder.com/practice/237ae40ea1e84d8980c1d5666d1c53bc
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// input
final int N = in.nextInt();
final int V = in.nextInt();
int[] v = new int[N];
int[] w = new int[N];
for (int i = 0; i != N; ++i) {
v[i] = in.nextInt();
w[i] = in.nextInt();
}
// work1
int[] maxVals = new int[V + 1];
for (int i = 1; i != V + 1; ++i) {
for (int j = 0; j != N; ++j) {
if (i - v[j] >= 0) {
int val = maxVals[i - v[j]] + w[j];
maxVals[i] = Math.max(val, maxVals[i]);
}
}
}
// work2
int[] vals = new int[V + 1];
boolean[] ok = new boolean[V + 1];
ok[0] = true;
for (int i = 1; i != V + 1; ++i) {
for (int j = 0; j != N; ++j) {
int k = i - v[j];
if (k >= 0 && ok[k]) {
ok[i] = true;
vals[i] = Math.max(w[j] + vals[k], vals[i]);
}
}
}
System.out.println(maxVals[V]);
System.out.println(ok[V] ? vals[V] : 0);
}
}