メンバーの消化コストを昇順に並べ, 食べ物の食べにくさを降順に並べるのが最適である.

そうでない場合, \(A_x \lt A_y\) かつ \(F_x \lt F_y\) となる \(x, y\) が存在することになる. このときの, 修行後の消化コストを \(B_x, B_y\) とする.

\(B_x \lt B_y\) ならば \(B_xF_y \lt B_yF_y\) かつ \(B_yF_x \lt B_yF_y\) となり, 食べ物を入れ替える方が得である.

\(B_x \geq B_y\) ならば修行の回数変更して修行後の消化コストが \(C_x = B_y, C_y = B_x\) となるようにすれば \(C_xF_y = B_yF_y\) かつ \(C_yF_x = B_xF_x\) となるので, 食べ物の担当を入れ替えても損はしない.

よって, \(F_x \geq F_y\) と並べるのが最適である.

あとは最大時間 \(T\) に収まるようにするための修行回数の合計が \(K\) を超えるかどうかを調べ, 修行回数が \(K\) 以下となる \(T\) を二分探索で求める.