AT_dp_x Tower
Description
[problemUrl]: https://atcoder.jp/contests/dp/tasks/dp_x
$ N $ 個のブロックがあります。 ブロックには $ 1,\ 2,\ \ldots,\ N $ と番号が振られています。 各 $ i $ ($ 1\ \leq\ i\ \leq\ N $) について、ブロック $ i $ の重さは $ w_i $ で、丈夫さは $ s_i $ で、価値は $ v_i $ です。
太郎君は、$ N $ 個のブロックのうち何個かを選び、それらを任意の順序で一列に積み重ね、塔を作ることにしました。 このとき、塔は次の条件を満たさなければなりません。
- 塔に含まれる各ブロック $ i $ について、ブロック $ i $ より上に積まれたブロックの重さの総和は $ s_i $ 以下である。
塔に含まれるブロックの価値の総和の最大値を求めてください。
Input Format
N/A
Output Format
N/A
Explanation/Hint
### 制約
- 入力はすべて整数である。
- $ 1\ \leq\ N\ \leq\ 10^3 $
- $ 1\ \leq\ w_i,\ s_i\ \leq\ 10^4 $
- $ 1\ \leq\ v_i\ \leq\ 10^9 $
### Sample Explanation 1
上から順にブロック $ 2,\ 1 $ と積み重ねると、この塔は条件を満たします。 塔に含まれるブロックの価値の総和は $ 30\ +\ 20\ =\ 50 $ となります。
### Sample Explanation 2
上から順にブロック $ 1,\ 2,\ 3,\ 4 $ と積み重ねればよいです。
### Sample Explanation 3
答えは 32-bit 整数型に収まらない場合があります。
### Sample Explanation 4
例えば、上から順にブロック $ 5,\ 6,\ 8,\ 4 $ と積み重ねればよいです。