アルゴリズムと計算量の問題
次の 個の品物から、重さの合計が 以下になるようにいくつか選びます。各品物は選ぶか選ばないかのどちらかで、同じ品物を 個以上選ぶことはできません。
| 品物 | A | B | C | D |
|---|---|---|---|---|
| 重さ | ||||
| 価値 |
品物を A, B, C, D の順に品物 とし、品物 の重さを 、価値を とします。 を「品物 から までの中から、重さの合計が 以下になるように選んだときの価値の合計の最大値」と定めます()。
を使って表を埋め、重さの合計が 以下のときの価値の合計の最大値 を求めてください。
この問題で使うもの
- 0-1 ナップサック問題の動的計画法(説明と入口の問題)
この問題を解けるようになるまで(2 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
0-1 ナップサック問題の動的計画法を使います。品物の行 と容量の列 の 2 次元の表 を、 の行(すべて )から順に埋めていきましょう。
ヒント 2
各マスでは「品物 を入れない:」と「品物 を入れる:」の大きい方を書きます。 のときは入れられないので をそのまま写します。
ヒント 3
途中まで埋めると ()は になります。最後の行では を計算します。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
の表を の行から順に、 について埋めていきます。
(品物なし):すべての で です。
(A:重さ 、価値 ): では A を入れられないので 。 では 。
(B:重さ 、価値 ): は をそのまま写します。
- :
- :
- :
- :
- :
(C:重さ 、価値 ): は のまま。
- :
- :
- :
- :
- :
- :
- :
(D:重さ 、価値 ): は をそのまま写します。
- :
- :
- :
- :
よって です。これは から来ており、 は A だけを選んだ場合なので、最適な選び方は A と D(重さ 、価値 )です。
なお、重さあたりの価値が大きい順(C, D, A, B)に貪欲に入れると C と D(価値 )で止まってしまい、最大値にはなりません。表を埋める動的計画法なら確実に最大値が求まります。
答え:
別解
品物は A(重さ3,価値4)、B(4,5)、C(2,3)、D(5,7)。漸化式で表を w=0,…,8 について埋める。
。
i=1(A: 3, 4): w=0,1,2 は 0、w=3〜8 は 4。
i=2(B: 4, 5): w<4 は と同じ。
w=4: max(4, V[1][0]+5=5)=5
w=5: max(4, V[1][1]+5=5)=5
w=6: max(4, V[1][2]+5=5)=5
w=7: max(4, V[1][3]+5=9)=9
w=8: max(4, V[1][4]+5=9)=9
i=3(C: 2, 3):
w=0,1: 0, 0
w=2: max(0, V[2][0]+3=3)=3
w=3: max(4, V[2][1]+3=3)=4
w=4: max(5, V[2][2]+3=3)=5
w=5: max(5, V[2][3]+3=7)=7
w=6: max(5, V[2][4]+3=8)=8
w=7: max(9, V[2][5]+3=8)=9
w=8: max(9, V[2][6]+3=8)=9
i=4(D: 5, 7):
w=0〜4: 0,0,3,4,5
w=5: max(7, V[3][0]+7=7)=7
w=6: max(8, V[3][1]+7=7)=8
w=7: max(9, V[3][2]+7=10)=10
w=8: max(9, V[3][3]+7=11)=11
よって 。
検算: 選び方は A+C+D? 重さ3+2+5=10 で超過。A+D=8 で価値 11。B+C=6 で 8、A+B=7 で 9、A+C=5 で 7、C+D=7 で 10、B+D は 9 で超過。3 個以上は A+B+C=9 超過など不可。最大は A+D の 11 で一致。