2017-05-15 8 views
0

先ほどの講演では、変更の問題を解決するために欲張りな方法を使用することは必ずしも機能しないと言われました。変更を加える:動的プログラミング

は、我々はn = 14に到達したい、と我々は異なる値の3枚のコインがあります:d1 = 1d2 = 7d3 = 10を次のように

本の例が与えられました。

欲張りのアプローチを使用すると、10 + 1 + 1 + 1 + 1(5コイン)になります。

ダイナミックな問題のアプローチでは、これを正確に解決できると言われました。私はそれを作業しようとしたが、それは戻って5

に来た。これは、これは明らかに行うことができたとき、私たちは5枚のコインが必要であることを改めて示したFが

量を作るために必要なコインの数を保持している
F[14] = min {F[14 – 1] , F[14 – 7], F[14 – 10]} + 1 

     = F[14 – 10] + 1 = 4 + 1 = 5 

を想定します2コイン(7 + 7)を使用します。

何がありますか?ありがとう。

+1

Fは{F [14から1]、F [14から7]、F [14から10]} + 1 = F [14 F [14 - 1]、F [14 - 7]、F [14 - 10]} + 1 は、 = F [14-7] + 1 = 1 + 1 = 2 –

答えて

1

そうでない場合はmin {F[14 – 1] , F[14 – 7], F[14 – 10]}=F[14-10]とします。最小値は実際F[14-7]=1であるため最適では[14] =分2

+0

これはなぜですか?私は、minが最小の結果を出した関数だと思った。この場合、14 - 10は最小の数字で、14 - 7より小さくなります。私は何を理解していませんか?ありがとう – Pete

+1

@Pete最小関数はF内の引数ではなく、Fの小数値を取得します。F [13]は、13を変更するコインの最小数を意味します。これは、d1からd3、全部で4つのコインのために。 F [14-7] = F [7]は、この場合、その1つのコインd2に対して7を変更するためのコインの最小数である。 F [14-10] = F [4]の場合。 4に変更するには、d1から4が必要です。したがって、これらのすべての最小値はF [7]であり、F [14-10]ではなく、 – AspiringMat

関連する問題