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