ひねりを加えた古典的な動的プログラミングのコイン変更問題を解決しようとしています。これは宿題の質問です。私は完全な解決策を探しているわけではありません。私が間違っていることを確認するためのいくつかの指針を探しているだけです。
入力:
x
ある価値に対してコインで支払いたい金額。d
利用可能な金種のコインの数を表すセット(1c、5c、10c、25c、100c、200c)
出力:
- 支払いのために手を交換する必要があるコインの最小数。
仮定:
- キャッシュ レジスターのオペレーターは、無制限にコインを供給でき、最適な釣り銭の出し方を知っています。
私がこれまでにやろうとしたこと:
すべての要素 C[i] が、金額 i で交換されるコインの/最小/数になるように、配列 C を構築しようとしています。
C[0] = 0
C[i] については、使用可能なすべての硬貨の金種について、すべての C[i-di] の最小値に 1 を加えた値をとって計算します。次に、使用可能なコインから選んだコインを取り除きます。
このアプローチは単純なケースではうまくいくようですが、たとえば、次のような場合です。
99 99 0 0 0 1 0
正確に 99 セントをセント単位で支払う (99 コインの交換) よりも、2 コインの交換になる $1 の方が「安い」ため、私のアプローチは失敗します。
任意のポインタをいただければ幸いです。