GT考试

这篇题解

解释一下

首先是状态的定义,具体来说,f[i][j]应该表示考虑了准考证前i位,准考证的后j位与不吉利数字最多匹配的位数为j,且整个准考证号不包含不吉利数字的方案数

这个最多匹配的意思:比如不吉利数字是1212,准考证号是551212,那么这就是f[6][4]的一个元素,而不是f[6][2]的一个元素

所以不难知道,答案就是i=0m1f[n][i]

考虑转移,一个很大的误区就是前i位的后缀匹配了j位,那么前i1位的后缀就一定匹配了j1位。比如一种情况,前i1位匹配了k位(k>j1),但是加上一个字符之后没办法匹配k+1位,然而却可以匹配j

所以我们要处理g数组,表示当前后缀的匹配长度为k,加上多少种字符之后匹配长度变成j

就是这个DP状态比较新,可以记住

update 2024.9.14

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

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

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

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