AtCoder Beginner Contest 286 D問題 Money in Hand
問題
提出解答
問題の概要
種類の硬貨を持っており, 種類目の硬貨は 円であり, 枚持っている.
これらから何枚かの硬貨を用いることにより, ちょうど 円を支払うことができるか?
制約
- は全て異なる.
解法
次のような問題を解ければ十分である.
枚の硬貨がある. 枚目の硬貨は 円である (重複が含まれる可能性がある). このとき, これらの硬貨を何枚か用いて, ちょうど 円を支払うことは可能か?
この問題を動的計画法で解くことにする. に対して, ] を以下で定義する.
- 枚目までの硬貨を用いることによって, ちょうど 円支払うことが可能ならば, , 不可能ならば, とする.
ベースケースは のときで,
である.
更新式について, 枚目の硬貨を使うか使わないかで場合分けをすることにより, 次のような更新式を導くことができる.
この動的計画法により, が答えになる. 時間計算量は 時間である.
元問題を次のようにして上の問題に帰着させる.
- 次のようにして を設定する.
- を にする.
- を にする.
このようにして上の問題に帰着させることによって, 時間で解くことができる.