ABC478 B - Topping
トッピング
考え方
$3$ 重ループで $1\leq i<j<k\leq N$ の範囲で全探索をすればよい。
価格が $V$ を超えていたらその候補はスキップし、そうでなければ最大嬉しさの記録を更新すればよい。
問題は、配列を普通に受け取ると 0-indexed になってしまうこと。
これにはいくつか解決策がある。
最も単純な方法としては、基準値を $V$ ではなく $V-3$ にすること。
0-indexed と 1-indexed の差である $3$ をこれで吸収できる。
あるいは、価格 $0$ で嬉しさが $-\infty$ のものを先頭にダミーとして用意してもよい。
入力例1での動作
入力を受け取る。
n: 5
v: 9
w: {31, 41, 59, 26, 53}
0-indexed では価格の条件を $i+j+k\leq V-3=6$ として、$0\leq i<j<k<5$ を全探索する。
条件を満たす候補は次の通り。
| $i$ | $j$ | $k$ | トッピング番号 | 価格の合計 | 嬉しさの合計 |
|---|---|---|---|---|---|
| $0$ | $1$ | $2$ | $1,2,3$ | $6$ | $31+41+59=131$ |
| $0$ | $1$ | $3$ | $1,2,4$ | $7$ | $31+41+26=98$ |
| $0$ | $1$ | $4$ | $1,2,5$ | $8$ | $31+41+53=125$ |
| $0$ | $2$ | $3$ | $1,3,4$ | $8$ | $31+59+26=116$ |
| $0$ | $2$ | $4$ | $1,3,5$ | $9$ | $31+59+53=143$ |
| $1$ | $2$ | $3$ | $2,3,4$ | $9$ | $41+59+26=126$ |
この中で嬉しさの合計が最大なのは、トッピング $1,3,5$ を選ぶときの $143$ である。
したがって、答えは $143$ となる。
注意点
特になし。
別解
特になし。