修复DNA

AC自动机上DP的典型题目

假设我们已经获得了最终的串,那么将这个串放在AC自动机上匹配的时候,一定是不会匹配到一个模式串的,我们考虑利用这一点来DP

f[i][j]表示将经过修改后的文本串的前i个字符放在AC自动机上匹配中途没有匹配到模式串且当前匹配到AC自动机的j号节点的最小修改数目

对于第i个字符,如果这个字符与j号节点所代表的字符相同就不用修改,否则的话一定要修改;对于第i1个字符,其要匹配到AC自动机上的一个节点u使得p通过tr数组能到j(也就是前i1个字符放到AC自动机上匹配的时候最后匹配到了u,然后接下来考虑第i个字符,query函数里面就会通过tr数组将u变成j,也就是u=tr[u][i]这一步);由于这里我们没有记录有哪些节点可以通过tr数组到j,所以我们不用填表法,而是用刷表法,这样子会简单很多(但是此时文本串的读入就要注意了,具体见代码)

posted @   最爱丁珰  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示