AT_abc032_d [ABC032D] ナップサック問題

Description

[problemUrl]: https://atcoder.jp/contests/abc032/tasks/abc032_d 0/1ナップサック問題を解いてください。0/1ナップサック問題とは以下のような問題のことです。 - $ N $ 個の荷物があり、$ i\ (1≦i≦N) $ 番目の荷物には価値 $ v_i $ と重さ $ w_i $ が割り当てられている。 - 許容重量 $ W $ のナップサックが1つある。 - 重さの和が $ W $ 以下となるように荷物の集合を選びナップサックに詰め込むとき、価値の和の最大値を求めよ。ただし、同じ荷物は一度しか選ぶことができない。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ W $ $ v_1 $ $ w_1 $ $ v_2 $ $ w_2 $ : $ v_N $ $ w_N $ - $ 1 $ 行目には、荷物の数を表す整数 $ N\ (1≦N≦200) $ とナップサックの許容重量を表す整数 $ W(1≦W≦10^9) $ が空白区切りで与えられる。 - $ 2 $ 行目からの $ N $ 行には、各荷物の情報が与えられる。そのうち $ i(1≦i≦N) $ 行目には、$ i $ 番目の荷物の価値を表す整数 $ v_i\ (1≦v_i≦10^9) $ と重さを表す整数 $ w_i\ (1≦w_i≦10^9) $ が空白区切りで与えられる。 - 「$ N≦30 $」、「全ての$ i(1≦i≦N) $ について $ 1≦w_i≦1000 $」、「全ての$ i(1≦i≦N) $ について $ 1≦v_i≦1000 $」という $ 3 $ つの条件のうち少なくとも1つの条件が成り立つ。

Output Format

出力は以下の形式で標準出力に行うこと。 $ 1 $ 行目に、達成できる最大の合計価値を出力せよ。末尾の改行を忘れないこと。

Explanation/Hint

### 部分点 この問題には部分点が設定されている。満点は $ 100 $ 点である。 - $ N≦30 $ を満たすデータセット $ 1 $ に正解した場合は、$ 34 $ 点が与えられる。 - $ N≦200 $ かつ全ての $ i(1≦i≦N) $ について $ 1≦w_i≦1000 $ を満たすデータセット $ 2 $ に正解した場合は、上記の点数とは別に $ 33 $ 点が与えられる。 - $ N≦200 $ かつ全ての $ i(1≦i≦N) $ について $ 1≦v_i≦1000 $ を満たすデータセット $ 3 $ に正解した場合は、上記の点数とは別に $ 33 $ 点が与えられる。 ### Sample Explanation 1 $ 2 $ 番目と $ 3 $ 番目のアイテムを選ぶと、合計の重みが $ 10 $ で価値が $ 16 $ となり、最大価値を達成できます。 この入出力例は、データセット $ 1,2,3 $ の制約を満たしているため、全てのデータセットの採点に用いられます。 ### Sample Explanation 2 この入出力例は、データセット $ 1 $ の制約のみ満たしているため、データセット $ 2,3 $ の採点には用いられません。 ### Sample Explanation 3 この入出力例は、データセット $ 3 $ の制約を満たしていないため、データセット $ 3 $ の採点には用いられません。 ### Sample Explanation 4 この入出力例は、データセット $ 2 $ の制約を満たしていないため、データセット $ 2 $ の採点には用いられません。