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