AT_arc073_b [ABC060D] Simple Knapsack 题解
注意到 W 的值很大,若是直接计算会 TLE/MLE/RE。
令 $base = w_1, d_i = w_i - base$。由题,$0 \le d_i \le 3$。若选择 k 个物品,总重量为 $\sum d_i + k \times base$,其中 $0 \le \sum d_i \le 300$。
考虑用 f_{i, j} 记录选择 i 个物品,\sum d_i = j 的最大价值。对于每个物品:
f_{i + 1, j + d_i} = \max(f_{i, j} + v_i)
最后枚举 $i, j$,若 i \times base + j \le W 则更新答案。
code