Codeforces Round #544 (Div. 3)E. K Balanced Teams
問題概要
人が 人おり, 番目の人の能力は である.
この中から 個以下のチームを作りたい. チーム作成の制約は各チーム内の任意のペアについてそのスキルの絶対値の差が 以下であることである.( 人のチームを作ることも可能である).
最大で何人をいずれかのチームに所属させることができるか?
制約
解法
制約に dp をしてくださいと書いてあるので, dp をします. ( 番目の人までで, 個のチームを作ったときに選べる最大人数) と定義してみましょう.
まず, 番目の人をどのチームにも所属させない場合は, 定義から明らかに です. では, 番目の人をから新たにチームを作る場合はどうでしょうか?
元の数列をソートしておけば, 番目の人を含むチームを新しく作る場合, を満たす人はすべてチームに入れるのが最適です(そうしない場合, 人数が減るか, 余計なチームをさらに作ることになります). を満たす がどこまでかは二分探索で求められますから, そういった に対して, です.
これらを実装すれば で答えを得ることができます. 二分探索の部分は尺取り法で実装すれば を落とすことができますが, 個人的には実装が面倒なので推奨しません(二分探索でも十分高速です).