No.288
ゆきうさぎさんの手持ちのお金を 円とすると, 手持ちのお金を一旦すべて貯金箱さんに預け, その後 円を最小の枚数の硬貨で返してもらえばいい. よって, 円を 円玉で作る最小の枚数を求める問題となる. (もちろん なら不可能)
あとは No.31 と似た問題となる.
がかなり大きくなるので, 通常のナップザック問題のように動的計画法で解くと時間計算量 となって間に合わない. そこで, 一番額面が大きい 円玉をなるべく多く使うようにする.
円玉 () を合わせて 枚使ったとして, その 枚目が 円玉だとする. そして,
とおくと, は 個あるので, 鳩の巣原理により, となる が存在する.
そのような に対して であるので は で割り切れる. よってこの硬貨の集合をより少ない枚数の 円玉に置き換えることができ, これを繰り返し適用することにより, 円玉の合計枚数は 枚より少なくできる.
すなわち, 円から 円以上を残してできるだけ 円玉で支払うのが最も枚数を少なくできる.
あとは 番目まで見たときに 円を支払う最小の枚数を とすると,
となるので, これを DP で計算すればいい.