ARC145 C - Split and Maximize 解法の正当性
ARC145 C - Split and Maximize の公式解説があっさりしていて説明不足だと思ったので、行間を埋めていたら結構たいへんだった。
スコアが最大となる構造の分析
のとき、 が成り立つのは公式解説の通りです。
〜 を使った ペアの作り方が任意に与えられたとします。ペア と があるとき、 と にペアを組み替えます。するとスコアを減少させずに のペアが作れます。続けて と 、 と 、、 と に注目して同じことを繰り返すと、スコアを減少させずに というペアに組み替えることができます。任意のペアの作り方についてこれが言えるので、 というペアを作ったときが最大スコアとなります。
括弧列との対応付け
ここが説明不足だと感じました。
スコア を達成する順列 をとります。そして、そのスコア を達成する の分割をひとつとります。 の先頭から に振り分けられたものを (
と書き、 に振り分けられたものを )
と書いて並べることで、ひとつの括弧列を得ます。ここで、この括弧列はバランスがとれているとは限らないことに注意してください。
この括弧列を先頭から見ていって、初めてバランスが壊れる)
の場所を見つけ、それ以降の(
と)
を反転させます。これは に振り分けものと に振り分けるものを交換することを意味し、操作後も分割のスコアは のままです。この操作を括弧列のバランスがとれるまで繰り返すことで、スコア を達成する の分割であって、対応する括弧列のバランスがとれているものが得られます。
つまり、スコア の順列があったとき、スコア を達成し、対応する括弧列がバランスのとれているような分割がただひとつ存在します。よって、バランスのとれた括弧列すべてに対して、対応する分割のスコアが になるような順列を数え上げればよく、あとは公式解説の通りです。
感想
解法を考えるより、解法の正当性を示すほうが楽しい(ときもある)。