翻译的太屎了,考虑给一个形式化题意:

有一定概率向字符串后面添加 a\texttt{a} 或者 b\texttt{b},如果在添加之后字符串内 ab\texttt{ab} 子序列数量超过 kk,那么立刻定值操作。

求最后的字符串内字串 ab\texttt{ab} 期望的数量。

fi,jf_{i,j} 表示现在确定的前缀中一共放了 iia\texttt{a}jj 个字串 a,b\texttt{a,b},在经过了一大堆操作停止之后整个串内含有的 ab\texttt{ab} 的数量。

假设添加 a\texttt{a} 的概率为 AA,反之的概率为 BB,那么有转移方程:

fi,j=A×fi+1,j+B×fi,i+jf_{i,j}=A\times f_{i+1,j}+B\times f_{i,i+j}

发现有对于边界情况,如果 i+jki+j\ge k 那么只需要在放一个 b\texttt{b} 就可以了,但是仍然可能出现一直放 a\texttt{a} 不结束的情况,考虑推式子。

先说结论,对于 i+jki+j\ge kfi,j=i+j+ABf_{i,j}=i+j+\dfrac{A}{B}

根据上面的转移有:

fi,j=A×fi+1,j+B×fi,i+jf_{i,j}=A\times f_{i+1,j}+B\times f_{i,i+j}

化简得到:

fi,j=A×fi+1,j+B×(i+j)f_{i,j}=A\times f_{i+1,j}+B\times (i+j)

因为对于只要在放一个就会停止,所以显然有:

fi,j=fi+1,j1f_{i,j}=f_{i+1,j}-1

联立上面的式子,经过化简就得到了:

fi,j=i+j+ABf_{i,j}=i+j+\dfrac{A}{B}

因为 i+ji+j 始终小于等于 kk,所以使时间复杂度为 O(k2)O(k^2)

收获:对于有可能出现无线循环的东西,无非就是列方程然后消元,如果很麻烦就直接去高斯消元。