题解:
首先看到这道题n特别大,m很小,又有着很明显的状态转移,基本就可以看出这是一道矩阵优化dp题目了(终于不是在看完题解后再说了QAQ)
可以比较容易的看出状态转移,设f[i][j]表示长度为n的串匹配到了i,长度为m的串匹配到了j,预先处理m串的kmp,找到m串如何转移(我第一次写没有注意到需要处理kmp这回事,直接不符合的话转移到f[i][0]上,这样实际上是漏掉了情况);
然后构造一个使f[i]转移到f[i+1]的矩阵B,使f[i]*B=f[i+1];
然后用矩阵快速幂就行了;
代码:
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include
//这样的矩阵乘法时间复杂度很高,如果矩阵乘法的内容比较少还是自己写个比较好