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