翻译的太屎了,考虑给一个形式化题意:
有一定概率向字符串后面添加 a 或者 b,如果在添加之后字符串内 ab 子序列数量超过 k,那么立刻定值操作。
求最后的字符串内字串 ab 期望的数量。
设 fi,j 表示现在确定的前缀中一共放了 i 个 a 有 j 个字串 a,b,在经过了一大堆操作停止之后整个串内含有的 ab 的数量。
假设添加 a 的概率为 A,反之的概率为 B,那么有转移方程:
fi,j=A×fi+1,j+B×fi,i+j
发现有对于边界情况,如果 i+j≥k 那么只需要在放一个 b 就可以了,但是仍然可能出现一直放 a 不结束的情况,考虑推式子。
先说结论,对于 i+j≥k 的 fi,j=i+j+BA。
根据上面的转移有:
fi,j=A×fi+1,j+B×fi,i+j
化简得到:
fi,j=A×fi+1,j+B×(i+j)
因为对于只要在放一个就会停止,所以显然有:
fi,j=fi+1,j−1
联立上面的式子,经过化简就得到了:
fi,j=i+j+BA
因为 i+j 始终小于等于 k,所以使时间复杂度为 O(k2)。
收获:对于有可能出现无线循环的东西,无非就是列方程然后消元,如果很麻烦就直接去高斯消元。