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状态比较新,可以记住

update 2024.9.14

重新做一遍,想到了这个状态了,因为这种状态在字符串匹配DP里面的确已经比较常见了

然后却没有想到用KMP的情况导致错误了

这道题目的思路还是利用计数DP的第一种方法,将状态设置出来;只不过\(n\)太大了需要用矩阵快速幂加速而已(复习一下,不要认为\(n\)太大就怯于列方程,完全是可以利用矩阵乘法加速的)

posted @ 2024-01-24 18:04  最爱丁珰  阅读(14)  评论(0)    收藏  举报