ARC131F ARC Stamp

我们令一次这样的操作称为一次敲章。先考虑如果纯靠敲章能做到什么程度。

考虑定义一个连续段的形式为 \((\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

posted @ 2024-03-26 08:31  LarsWerner  阅读(30)  评论(0编辑  收藏  举报