[ARC059F] バイナリハック
2023-09-29
题目
难度&重要性(1~10):6
题目来源
luogu
题目算法
(纯)dp
解题思路
一道非常水的 dp 题。
先看数据 \(N\le 5000\),考虑 \(O(n^2)\) dp。
对于题目的三个操作中,我们唯一需要仔细思考的就是对于退格的操作,因为退格操作是不需要去保证退掉的字符 \(0/1\) 的,但需要保证退掉之后剩下的字符是我们想要的。那么我们就需要将 dp 的一维状态设计为可以去处理退格的。
记 \(f_{i,j}\) 表示当前进行了 \(i\) 次操作,当前已经匹配了 \(j\) 个字符。(这里使用刷表法转移)
那么我们对于输入 \(0/1\) 的操作转移就非常轻松:\(f_{i+1,j+1}\gets f_{i,j}\)。
那如何很好的处理退格呢,前面说了不需要去知道被退的字符,那么我们退掉的字符就会有两种可能,而我们 dp 的第二位有保证了前 \(j\) 个字符匹配的,我们就可以直接进行转移了:
\[\begin{cases}f_{i+1,j-1}\gets f_{i,j}\times 2 & (j>0)\\f_{i+1,j-1}\gets f_{i,j} & (j=0)\end{cases}
\]
然后这道紫题就通过了。
完成状态
已完成