単元一覧 › 大学数学 アルゴリズムと計算量

アルゴリズムと計算量の問題

難易度 1教科書の例題レベル大学数学 アルゴリズムと計算量

次の 個の品物から、重さの合計が 以下になるようにいくつか選びます。各品物は選ぶか選ばないかのどちらかで、同じ品物を 個以上選ぶことはできません。

品物ABCD
重さ
価値

品物を A, B, C, D の順に品物 とし、品物 の重さを 、価値を とします。 を「品物 から までの中から、重さの合計が 以下になるように選んだときの価値の合計の最大値」と定めます()。

を使って表を埋め、重さの合計が 以下のときの価値の合計の最大値 を求めてください。

この問題で使うもの

この問題を解けるようになるまで(2 技能)
算数中学高校大学大学院

読み込み中…

右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。

一覧で見る(前提が先)
  1. 動的計画法の基本(硬貨の最小枚数)
  2. 0-1 ナップサック問題の動的計画法

ヒント

行き詰まったら、上から順に 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 で一致。

この問題の確認

AI が作成した問題です。公開前に次の確認を行いました。確認の方法について

間違いを報告する

この問題の誤り・分かりにくい点・難易度や学年のずれを知らせる
どこについての報告ですか

報告の内容と問題の番号を保存します。名前やメールアドレスは保存しません。

関連する問題