题解 | #【模板】完全背包#
【模板】完全背包
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); } }