私は持っているお金の全額を渡されました。これで、各桁 (1 から 9) を書き留めるのにかかるコストがわかります。では、そこから最大数を作成するにはどうすればよいでしょうか。この問題に対する動的計画法のアプローチはありますか?
例:
利用可能な合計金額 =
各桁 (1 から 9) の 2 コスト =9, 11, 1, 12, 5, 8, 9, 10, 6
出力:33
私は持っているお金の全額を渡されました。これで、各桁 (1 から 9) を書き留めるのにかかるコストがわかります。では、そこから最大数を作成するにはどうすればよいでしょうか。この問題に対する動的計画法のアプローチはありますか?
例:
利用可能な合計金額 =
各桁 (1 から 9) の 2 コスト =9, 11, 1, 12, 5, 8, 9, 10, 6
出力:33
動的プログラミングは必要ないと思います。次のことを行ってください。
これが機能する理由:
11111
>9999
と91111
> 88888
、つまり、次のようにするのが最善であると考えてください。
最適化:
これを効率的に行うには、より大きな数字よりもコストがかかる数字を破棄します: (より大きな値を持つ安価な数字の代わりにその数字を選択することは決して良い考えではないため)
Given:
9, 11, 1, 12, 5, 8, 9, 10, 6
Removing all those where I put an X:
X, X, 1, X, 5, X, X, X, 6
So:
1, 5, 6
これで、バイナリ検索を実行できます (値がどの桁から来たかを覚えておいてください) (ただし、9 桁のみの場合、バイナリ検索は、すでにマイナーな実行時間に対して実際には驚くべきことではありません)。
実行時間:
O(n)
(9 は定数であるため、最適化の有無にかかわらず)