首页 > 其他分享 >[ARC059F] バイナリハック

[ARC059F] バイナリハック

时间:2023-09-29 16:34:58浏览次数:27  
标签:字符 题目 退掉 ARC059F dp 退格

2023-09-29

题目

[ARC059F] バイナリハック

难度&重要性(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}+=f_{i,j}\)。

那如何很好的处理退格呢,前面说了不需要去知道被退的字符,那么我们退掉的字符就会有两种可能,而我们 dp 的第二位有保证了前 \(j\) 个字符匹配的,我们就可以直接进行转移了:

\[\begin{cases}f_{i+1,j-1}+=f_{i,j}\times 2 & (j>0)\\f_{i+1,j-1}+=f_{i,j} & (j=0)\end{cases} \]

然后这道紫题就通过了。

完成状态

已完成

标签:字符,题目,退掉,ARC059F,dp,退格
From: https://www.cnblogs.com/OIerBoy/p/17737076.html

相关文章

  • [ARC059F] バイナリハック
    \(\mathcalLink\)解决本题的关键在于发现给定字符串没啥用,只需考虑长度由此考虑有两种做法:设\(f_{i,j}\)表示敲了\(i\)次键盘,得到的恰好为字符串中的前\(j\)个......