円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。 以上の整数 に対し、 円をちょうど支払うときに使う硬貨の枚数の最小値を とする( とする)。 は、 のとき漸化式
を満たす。この漸化式を用いて を求めよ。
動的計画法の基本(硬貨の最小枚数)
のような 1 次元の漸化式で表を埋め、 円を払う硬貨の最小枚数を求められる
前提
中学までに習ったことだけで始められます。
説明
硬貨の種類がいくつか与えられたとき、ちょうど 円を払うのに必要な硬貨の最小枚数を求める方法を学びます。小さい金額の答えを表にして、それを使って大きい金額の答えを順に決めていくのが「動的計画法」の考え方です。各金額の答えは1つの式(漸化式)で求められるので、計算は表を左から右へ埋めていくだけで済みます。大きい硬貨から貪欲に使う方法では最小にならない硬貨の組でも、この方法なら正しい答えが出ます。
なぜそうしてよいのか
硬貨の金額の集合を (例えば )とし、ちょうど 円を払う最小枚数を と書きます。 円は硬貨を1枚も使わずに払えるので です。 のとき、 円の払い方を1つ考え、その中の硬貨を1枚選んで「最後の1枚」と呼びます。その金額を とすると、残りの硬貨でちょうど 円を払っていることになります。残りの枚数は少なくとも 枚なので、全体は少なくとも 枚です。逆に、 円を 枚で払う方法に硬貨 を1枚足せば、 円を 枚で払えます。
最後の1枚として考えられるのは、 をみたす硬貨 だけです。よって、その全部の候補の中で最も少ないものが答えになります。
右辺には より小さい金額の値しか出てきません。そのため の順に表を埋めれば、どの値も必要なときにはすでに求まっています。ちょうど払えない金額 には (払えない印)を入れ、 として扱います。
手順
硬貨の集合 と目標金額 を確認し、 から までの表を用意する
初期値を と書き込む
の順に、 をみたす各硬貨 について候補 を計算する(払えない金額は とする)
候補の最小値を として表に書き込む:。候補が1つもないか、すべて なら とする
表の を読み取る。これが求める最小枚数である( ならちょうど払えない)
例題
1円、3円、4円の3種類の硬貨が何枚でも使えるとする。ちょうど6円を払うのに必要な硬貨の最小枚数を求めよ。
例題の解答
手順1:、 とし、 から までの表を用意する。
手順2: とする。
手順3・4: から順に候補を計算し、その最小値を書き込む。
- : だけが使えるので、。よって 。
- : だけが使えるので、。よって 。
- :候補は のとき 、 のとき 。よって 。
- :候補は のとき 、 のとき 、 のとき 。よって 。
- :候補は のとき 、 のとき 、 のとき 。よって 。
- :候補は のとき 、 のとき 、 のとき 。よって 。
手順5: である。実際に の2枚で払える。なお、大きい硬貨から使うと の3枚になり、最小にならない。
答え:
よくある誤り
大きい硬貨から順に使えば最小になると思い込む誤り。硬貨が で6円のとき、この方法では の3枚になる。正しくは表を埋めて ()となる。
初期値を としたり、そもそも書かなかったりする誤り。正しくは、0円は硬貨0枚で払えるので 。これを誤ると、例えば がずれて表全体が狂う。
の硬貨まで候補に入れて (金額が負になる)を使ってしまう誤り。正しくは の硬貨だけを候補にする。例えば では は使えず、。
1円硬貨がないときに、ちょうど払えない金額の値を0や空欄のまま計算してしまう誤り。正しくは とおく。例えば なら であり、 となる。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。 以上の整数 に対し、 円をちょうど支払うときの硬貨の枚数の最小値を とする( とする)。 は、 のとき漸化式
を満たす。この漸化式を用いて の表を順に埋め、 を求めよ。円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。 以上の整数 に対し、 円をちょうど支払うときの硬貨の枚数の最小値を とする( とする)。 のとき、 は次の漸化式を満たす。
この漸化式を用いて の表を順に埋め、 を求めよ。
この技能を使う問題
この技能の次に学べること
- 貪欲法が最適でない場合の判定 (大学数学 アルゴリズムと計算量)
- 0-1 ナップサック問題の動的計画法 (大学数学 アルゴリズムと計算量)
- 編集距離 (大学数学 アルゴリズムと計算量)
- 最長共通部分列 (大学数学 アルゴリズムと計算量)