No.288

ゆきうさぎさんの手持ちのお金を 円とすると, 手持ちのお金を一旦すべて貯金箱さんに預け, その後 円を最小の枚数の硬貨で返してもらえばいい. よって, 円を 円玉で作る最小の枚数を求める問題となる. (もちろん なら不可能)

あとは No.31 と似た問題となる.

がかなり大きくなるので, 通常のナップザック問題のように動的計画法で解くと時間計算量 となって間に合わない. そこで, 一番額面が大きい 円玉をなるべく多く使うようにする.

円玉 () を合わせて 枚使ったとして, その 枚目が 円玉だとする. そして,

とおくと, 個あるので, 鳩の巣原理により, となる が存在する.

そのような に対して であるので で割り切れる. よってこの硬貨の集合をより少ない枚数の 円玉に置き換えることができ, これを繰り返し適用することにより, 円玉の合計枚数は 枚より少なくできる.

すなわち, 円から 円以上を残してできるだけ 円玉で支払うのが最も枚数を少なくできる.

あとは 番目まで見たときに 円を支払う最小の枚数を とすると,

となるので, これを DP で計算すればいい.