解説
現在のレベルが のとき、 であるダンジョンだけを考えればよい。この条件を満たさないダンジョンに挑戦してもレベルは増加しないため、後で挑戦する場合より有利になることはない。
であるダンジョンの中から、 が最も小さいダンジョンを選ぶ。現在のレベルが で、選んだダンジョンの二つ目の難易度が ならば、攻略後のレベルは
となる。現在攻略できる二つのダンジョンの二つ目の難易度が であるとき、二つのダンジョンを の順に攻略した後のレベルは、 の順に攻略した後のレベル以上である。この交換論法を繰り返すと、現在攻略できるダンジョンの中で が最も小さいダンジョンを最初に選んでも、最適解を失わないことが分かる。
ダンジョンを の昇順にソートする。 が現在のレベルより小さいダンジョンの を最小ヒープに追加し、ヒープから最小値を取り出してレベルを更新する。ヒープが空なら、残っているすべてのダンジョンではレベルを上げられないため終了する。
時間計算量は 、空間計算量は である。最終的なレベルは 以下であるため、 以下であり、符号付き 64 ビット整数の範囲に収まる。
Solution written by GPT5