AOJ 2826 - ゲームバランス
解法
倒すまでに最小回以上かかるなかで最大となるを二分探索で求めます。
ゲームクリアできない場合、になります。二分探索時は、ゲームクリアまでに回以上かかっている、と仮定します(最後に求まったを確認した場合にゲームクリアできなかった場合は答えが-1になります)。
以降は、ゲームクリアができると仮定して話を進めます。
そして、そもそも、の場合に戦闘が回未満になる場合は-1になります。これを排除しておきます。
を固定した際に、何回かかるかを調べます。
現在のレベルをとします、初期値は1です。
ここから、レベルがの際に一番レベルが上がる敵を毎回倒すことをシミュレートします。回を超えたらそれ以上シミュレートする必要がないので、そこで打ち切ります。を倒せるレベルになっていたら、その場合もシミュレートを終了します。
レベルが一番上がるのは、との差が最も小さい強さを持つ敵です。
そこで、強さ以上を持つ敵の中で一番弱い敵を二分探索で調べます。
そして、その敵が倒せるかどうかを判定します。
倒せる場合はその際に上がるレベルをメモします。
次に、先ほど調べた敵の1つ手前にいる敵について、上がるレベルをメモします。この際は、自分のレベルがのため確実に倒せることから、倒せるかどうかの判定をする必要はありません。
そして、今調べた2体のうち、よりレベルが上がる方を選択して倒します。
これを繰り返します。