目录
---------------------------------------------------------------------------------------------------------------------------------
网上大部分讲解都是停留在快速幂的模板和求解斐波那契数列上,但矩阵快速幂的应用远不及此,且难点在于转移矩阵的构造,而且会结合具体DP问题来构造转移矩阵。
答案的求解包括三个矩阵 答案矩阵 = 转移矩阵 * 初始矩阵
转移矩阵求解套路
重点在于转移矩阵的求得,套路是,找到转移方程,由特殊到一般,考虑承接
常见转移矩阵1-斐波那契矩阵
找到转移方程
可知,要想求解f[n],必须知道f[n-1],f[n-2]
考虑特殊情况f[n]
得初始矩阵
答案矩阵(f(n)处于(1,1)位置,故是转移矩阵的第一行乘上初始矩阵的第一列)
转移矩阵
得到特殊矩阵
考虑承接
考虑到我们即使我们本次求得了f(n),但是我们不得不为下一次f(n+1)的求解做准备,因此我们需要承接上次求解的f(n-1),如何求解,很容易,f(n-1)在(2,1)位置,只需要转移方程第二行乘上初始方程等于f(n-1)即可,
特殊到一般
对转移方程进行快速幂,把初始方程变成普通dp时最初状态,在斐波那契中的dp解法中,我们只需要先知道dp[0]=0,dp[1]=1即可。转移方程的幂数是n-1
当然,也完全可以这样,
承接套路
值得注意的是,这种承接方式在大多数题目中都适用,也就是将二行往后的每行i,(i,i-1)位置填上1,其余位置填上0即可。
常见转移矩阵2-类斐波那契数列
主要是一些含有常数系数的
第一行换系数,第二行往后考虑承接即可
常见转移矩阵3-幂常数
按照第一类时的套路,求fn,无非就是要知道fn-1,与n^2
可是我们发现,要求出(n+1)^2,靠n^2是远远不够的
(n+1)^2=n^2+1+2*n ,我们还应该知道n,和常数1
n+1)^2被推了出来,还要考虑本次能供fn+1使用,因此还应该加上n+1,与常数1
然后特殊化一般,利用快速幂求解即可。
其余更高次幂常数,利用二项式定理
n^3 = (n-1+1)^3 = (n-1)^3 + 3*(n-1)^2 + 3*(n-1) + 1
n^4 =(n-1+1)^4 = (n-1)^4 + 4*(n-1)^3 + 6*(n-1)^2 + 4*(n-1) + 1
.......以此类推
n^3为例
前缀和
T[0]=T[1]=T[2]=1;
T[N]=T[N-1]+T[N-2]+T[N-3]
求解 T[A]+T[A+1]+...+T[B]
也就是要构造前缀和sb,sa-1
可以先求出sn
sn=tn+sn-1
这里的tn的构造方式就是一个类菲波那切数列的构造方式
考虑承接即可
具体DP问题