動的計画法・再帰 / 0/1 Knapsack(ナップサック問題)

入れる / 入れないを
表で積み上げる。

容量制約の下で価値の合計を最大化する問題です。DP テーブルを使うと、部分問題の積み重ねで考えられます。

DP / 再帰表や木で理解定番教材

目次

このページの目次

このページでわかること

先に知っておくポイント

1. 状態が何か
2. 前の状態をどう使うか
3. なぜその漸化式になるか

概要

概要

容量制約の下で価値の合計を最大化する問題です。DP テーブルを使うと、部分問題の積み重ねで考えられます。

考え方

擬似コード

dp[i][w] = max(not take, take if possible)

要点

要点まとめ

時間計算量

O(nW)

空間計算量

O(nW)

主題

DP table

状態

品物数 × 容量

補足

向いている場面と注意点

核心

各品物について入れるか入れないかを比較します。

見せ方

行と列の意味を先に固定すると迷いません。

注意

価値と重さを混同しないこと。

動きで確認

動きを見てたしかめる

ここでは「状態が何か」を見ながら、上で読んだ内容を動きと結びつけます。

注目決定的確定

次に見る

次に見るページ

比較すると違いがわかりやすいページを先に置いています。