問題. Modulo Operations
個の相異なる自然数からなる集合
と自然数
が与えられる.初期値を
として次の操作を
回行う.
から任意に要素
を1つ選んで取り除き,現在の値
を
に更新する.
の任意の取り除き方によって得られる
回の操作後の値の総和を求めよ.
制約: ,
解法.動的計画法
は降順に整列していると仮定する.すなわち,
とする.
を初期値が
で部分集合
に対して得られる答えである総和とする.
は
の最大値なので,選択する順番によって
が
回の操作後の値に影響を与えない.まず
が初期値
で操作後の値に影響を与える可能性がある場合を考える.それは,
が初めに選択されるときのみで,このときの総和は
となる.次に,
が操作後の値に影響を与えない場合であるが,それは
が2番目以降に選択されるときである.このときの総和は
に対して
が2番目以降に選択される
通りの方法がありうるので
となる.したがって,
となる.
以上で, を降順にソートするのに
時間で,上の実装をメモ化再帰で
時間で実装できるので,全体で
時間で求まる.
計算時間: