洛谷 P3193 [HNOI2008]GT考试 (矩阵快速幂优化dp + kmp)
链接: [HNOI2008]GT考试
题意:
给出一个长度小于20的数字串 s,问有多少种长度为 n(n <= 1e9) 的数字串中不包含 s 。
思路:
首先不考虑数据范围,可以用dp[ i ][ j ]表示枚举到第 i 位当前后缀匹配 s 的最大前缀。最后dp[n][0 , m - 1]就是答案。
具体怎么转移呢,如果新加的这一位可以与 s 的下一位匹配,那么就可以转移到 dp[i + 1][j + 1]。如果不匹配就往回找第一个能匹配的位置,这里可以利用kmp的next数组往回跳,匹配一个新的
原创
2021-07-21 19:41:25 ·
270 阅读 ·
0 评论