ナップサック問題の半分全列挙をO(2^{n / 2})で解く

少し話題になったので、自分のメモも兼ねて

方針はこれです。ちなみになんですが、ソートされた配列をソートしたままmergeするのに、C++std::mergeがあるのでこれを使うと結構楽にかけます。

実装が分からないよって人は参考にしてみてください。

実装例

 n > 30なのはassertしてるので、分かりにくいですが、4msぐらいでかなり早いですね。

atcoder.jp