嘘~ 正在从服务器偷取页面 . . .

高斯消元的线性技巧


高斯消元的线性技巧

朴素的高斯消元是 $\mathcal{O}(n^3)$ 的,算法原理参考 浅谈高斯消元

而在一些题目中,比如 洛谷P5516 [MtOI2019] 小铃的烦恼 ,实际上我们有一种线性的技巧。


设 $a_i,b_i,c_i$ 都是关于 $i$ 的函数或常数,$k$ 为常数,递推式(通常是概率或者期望的dp式子)

所对应的矩阵形如

方便起见,我们先把系数的负号去了

用第一行消第二行的 $x_2$

干脆把第二个系数也去掉

以此类推,我们可以将整个矩阵转变成

其中 $k_n$ 是 $\mathcal{O}(1)$ 可以算出的,根据之前的 $k$​​ 。

那么高斯消元的过程就变简单了。我们只需要两个数组 $k_i$ 和 $d_i$ 。

过程比朴素的高斯消元简单多了,只需要扫一遍,时间复杂度 $\mathcal{O}(n)$ 。

实现代码的话参考一开始给的题目链接即可。


文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论
  目录