解説
この問題では、目標とする比率xを定め、その比率を実現できるかどうかを判定する方法を取ります。この判定作業を効率よく行うために二分探索を用います。
まず、比率をx以上にできるかを考えてみましょう。数式で示すと以下のようになります。
∑Ei∑Pi≧x
これを式変形していきます。平均最大化の考え方に近いと思います。
∑Ei∑Pi∑Pi∑Pi−x∑Ei∑(Pi−xEi)≧x≧x∑Ei≧0≧0
このように変形出来ます。よって、k個選んだ時、(Pi−xEi)の総和が0以上になっていれば比率はx以上に出来ると判定できます。
証明は省略しますが、(Pi−xEi)は大きい順に選ぶのが最適です。
計算量については、二分探索でlogN、判定でソートの部分がNlogNかかります。よって全体でO(N(logN)2)となります。
実装