题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2243
题目大意:给定n个模板串,问有多少个长度不超过L的含至少一个模板串的字符串。
首先考虑问题的相反问题,求有多少个不含任何模板串的字符串,并只考虑长度正好为$l$的字符串的数量,这个问题的解题方法见POJ2778(DNA Sequence)。
现在我们已经能计算长度为$l$的字符串的数量,但问题要求的是长度不超过$L$的字符串数量,答案对应的矩阵为 $A^1+A^2+…+A^L$ 。
令 $S_n=A^1+A^2+…+A^n$,则$S_n=S_{n-1}A+A$
$$
\left[ \begin{matrix} S_n & A \end{matrix} \right] = \left[ \begin{matrix} S_{n-1} & A \end{matrix} \right] \left[ \begin{matrix} A & 0 \\ E & E \end{matrix} \right] = \left[ \begin{matrix} 0 & A \end{matrix} \right] {\left[ \begin{matrix} A & 0 \\ E & E \end{matrix} \right]}^n
$$
这样就能用矩阵快速幂求出不含任何模板串的答案对应的矩阵了。接下来要用总方案数减去这个答案。
使用同样的方法求出$T_n=26^1+26^2+…+26^n$,并用$T_n$减去上述答案即可。
$$
\left[ \begin{matrix} T_n & 26 \end{matrix} \right] = \left[ \begin{matrix} T_{n-1} & 26 \end{matrix} \right] \left[ \begin{matrix} 26 & 0 \\ 1 & 1 \end{matrix} \right] = \left[ \begin{matrix} 0 & 26 \end{matrix} \right] {\left[ \begin{matrix} 26 & 0 \\ 1 & 1 \end{matrix} \right]}^n
$$
1 |
|