思考の流れ
- 高橋君の取る点数を固定する. (この値を とする.) このとき, なら に, なら にするのが最適.
- つまり, の取りうる値を に限った問題を考えても答えは同じ.
- 今度は とする の集合 を固定し, の値を変動させる. 番目のテストを 勉強すると, なら だけ, なら だけ, の値が増える.
よって, この増加分が大きいテストから勉強するのが良い. つまり, あるテストを まで勉強して, 次のテストを まで勉強して......という最適解が存在. - つまり2. に加えて, 高々 つの番号 を除いて に限った問題を考えても答えは同じ.
- 4.で除く を固定する.
と書いたら を除いているとする.
のとき, このテストによる への寄与は , のとき, このテストによる への寄与は である. よって, を から に変えると, は だけ増える.
よって, 最初全ての について, としておいて, が大きい について にしていくのが良い. - を降順に並べ, 累積和をとる. これを ( を除いているので まで)とする.
なる最大の を とすると, 個のテストを まで勉強して, 残り足りない分を 番のテストを勉強すればよいことが分かる. をどれだけ勉強する必要があるかは簡単な計算で求まるのでこの場合の総勉強量は の勉強量) と計算できる.
ただし, 足りない分を賄え場合があるが, その時は を固定するのが最適でない場合なのでそれはそれで良い. また, 上記の値が を固定した場合の最適解でない場合もあるが, これも7. で全探索をする過程で回収できるので放っておいてよい. - を全探索する. の値は に依らないため, 最初に降順に並べておけばそれを使い回すことで, 各 に対して で 6. の値を計算できる. (前から 項の中に が含まれるかで場合分けすれば良い. )
- 全体 になったので解けた.
気持ちよく解けたので記事にした.