GT考试
看这篇题解
解释一下
首先是状态的定义,具体来说,\(f[i][j]\)应该表示考虑了准考证前\(i\)位,准考证的后\(j\)位与不吉利数字最多匹配的位数为\(j\),且整个准考证号不包含不吉利数字的方案数
这个最多匹配的意思:比如不吉利数字是\(1212\),准考证号是\(551212\),那么这就是\(f[6][4]\)的一个元素,而不是\(f[6][2]\)的一个元素
所以不难知道,答案就是\(\sum_{i=0}^{m-1}f[n][i]\)
考虑转移,一个很大的误区就是前\(i\)位的后缀匹配了\(j\)位,那么前\(i-1\)位的后缀就一定匹配了\(j-1\)位。比如一种情况,前\(i-1\)位匹配了\(k\)位(\(k>j-1\)),但是加上一个字符之后没办法匹配\(k+1\)位,然而却可以匹配\(j\)位
所以我们要处理\(g\)数组,表示当前后缀的匹配长度为\(k\),加上多少种字符之后匹配长度变成\(j\)
就是这个DP状态比较新,可以记住