我們令一次這樣的操作稱為一次敲章。先考慮如果純靠敲章能做到什麼程度。
考慮定義一個連續段的形式為 \((\text{AR/R})^{x}\text{ARC}(\text{RC/C})^y\),那麼將 \(S\) 劃分為若干個連續段,連續段間要麼由一個 \(R\) 相連,要麼由一段空/無法修改的段相連。
容易發現這樣的分解是唯一的。
暴力分解之後 DP,\(f_{i,j,0/1/2}\) 表示考慮 \([1,i]\) 段,用了 \(j\) 步操作,當前段沒敲章/連續的敲章仍未結束/敲了且已結束(有中間的 \(R\) 也算在仍未結束)。那麼有以下幾類轉移:
-
當前元素為 ARC,那麼可以敲下這段的第一個章(\(0\to 1\)),也可以結束這段的敲章(\(0/1\to 2\)),也可以延續這段的敲章(\(1\to 1\)),也可以延續這段的不敲章(\(0\to 0\))。注意前三種情況都是要讓操作多一次。
-
當前元素為 AR/A,那麼可以延續不敲章(\(0/2\to 0\)),也可以敲下第一個章(\(0/1/2\to 1\))。
-
當前元素為 RC/C,那麼可以延續狀態(\(x\to x\)),也可以結束敲章(\(1\to 2\))。
-
當前元素為空/不可操作,那麼只能 \(2\to 0\) 或 \(0\to 0\)。
-
當前元素為夾在中間的 R,那麼可以選擇不敲章(\(0/2\to 0\)),或者延續敲章(\(1\to 1\))。
討論一下各類轉移的轉移係數即可。
https://atcoder.jp/contests/arc131/submissions/50491408