この記事は 「競プロ!!」競技プログラミング Advent Calendar 2017 の 日目の記事として書かれました。 競技プログラミングをそれなりにやってきた方となれば、動的計画法に触れたことも多いでしょう。今回は、その動的計画法における空間計算量削減テクを色々紹介したいと思います。 普通のナップザック問題 題材として、ごく普通のナップザック問題を考えてみましょう。 容量 のナップザックに、品物をいくつか入れたいと考えています。品物は全部で 個あり、 番目の品物は価値 、容量 です。品物の在庫はそれぞれ 個ずつなので、同じ商品を複数個入れることはできません。ナップザックの容量を超えることなく商品を入れる時、入れた商品の価値の総和の最大値を求めてください。 制約は 時間制限 sec メモリ制限 MB とします。せっかく空間計算量削減の話をするんですから、これくらい厳しくしないとですよね
