基本方針

100100 グラム 11 円のハンバーガーが常に存在することに着目します。

このハンバーガーの存在によって、 10001000 円以上のハンバーガーを注文する意味が完全になくなります。(重さが maxW=105\text{max}W = 10^5 グラムだとしても 100100 グラム 11 円のハンバーガーの方がお得なので)

同じ値段のハンバーガーについては、重さが一番大きいものだけに選択肢を絞ることができます。

以上の考察を踏まえ、適切にハンバーガーを除外することで以下の制約の個数制限なしナップザック問題に帰着させることができます。

  • 1N10001 \leq N \leq 1000
  • 1M1051 \leq M \leq 10^{5}
  • 1Ci10001 \leq C_i \leq 1000
  • 1Wi1051 \leq W_i \leq 10^{5}

ここからの解説は以下の記事を参考にすると良いでしょう。

https://qiita.com/O-Jun/items/e9e411916efd3377c228

実装例(C++)