Codeforces Round #490 (Div. 3)F. Cards and Joy
問題概要
長さ の数列があり, 番目の要素は である.
この数字を 人に 個ずつ配る. 番目の人は数字 を好んでおり, 配られた数字の中の の個数が ならば幸福度 を得る.
自由に数列を配れるとき, 全体の幸福度の最大値はいくらか?
制約
解法
数字 を好む人に, あるだけ を配るのが最適なのはすぐわかります. では, 数字 を好む人が 人いて, 数字 が 個あるとき, 得られる最大値はいくらでしょうか?
一人 枚までしか配ることができないので, のとき明らかに幸福度の最大は です( 人全員に を 個ずつ配ることができます). これを満たさない場合を考えましょう.
( 人に 個の数字を配るときの幸福度の最大値) としましょう. 遷移を考えれば, 人目に 数字を 個配る場合それぞれについて考えれば良いですから,
となります. この dp テーブルは で埋められることがわかります.
これさえできれば, 各数字の個数とそれを欲している人数を std::map などで管理すれば, 答えを求めることができます.