矩阵乘法专题

基础?递推

斐波那契, F 0 = 1 , F 1 = 1 , F n = F n − 2 + F n − 1 ( n ≥ 2 ) F_0=1,F_1=1,F_n=F_{n-2}+F_{n-1}(n\geq 2) F0=1,F1=1,Fn=Fn2+Fn1(n2)
所以通过 O ( n ) O(n) O(n)解出


矩阵乘法

C i , j = ∑ A i , k × B k , j C_{i,j}=\sum A_{i,k}\times B_{k,j} Ci,j=Ai,k×Bk,j
矩阵乘法是具有结合律的,所以通过这个特点可以用到快速幂。

  • 状态矩阵,长度为 n n n的一维向量
  • 转移矩阵,与状态矩阵相乘的矩阵

洛谷 1962 斐波那契数列

分析

容易可得,状态矩阵就是 [ F n − 1 F n ] \left[\begin{matrix}F_{n-1}&F_n\end{matrix}\right] [Fn1Fn]
根据斐波那契数列,可以得到
[ 0 1 1 1 ] \left[\begin{matrix}0&1\\1&1\end{matrix}\right] [0111]
显然,对于 F n − 1 F_{n-1} Fn1在下一时刻会给 F n F_{n} Fn,而 F n F_{n} Fn会结合 F n − 1 F_{n-1} Fn1在下一时刻变成 F n + 1 F_{n+1} Fn+1,所以得到了这个转移矩阵
那么 F n = F 0 × [ 0 1 1 1 ] n F_{n}=F_{0}\times \left[\begin{matrix}0&1\\1&1\end{matrix}\right]^n Fn=F0×[0111]n
代码太丑,就不贴了


HDU 5015 233 Matrix

题目

给定 a 1 , 0 , a 2 , 0 , … , a n , 0 a_{1,0},a_{2,0},\dots,a_{n,0} a1,0,a2,0,,an,0,然后 a 0 , 0 = 0 , a 0 , 1 = 233 , a 0 , 2 = 2333 , … a_{0,0}=0,a_{0,1}=233,a_{0,2}=2333,\dots a0,0=0,a0,1=233,a0,2=2333,,规定 a i , j = a i − 1 , j + a i , j − 1 a_{i,j}=a_{i-1,j}+a_{i,j-1} ai,j=ai1,j+ai,j1
a n , m   m o d   10000007 a_{n,m} \bmod 10000007 an,mmod10000007


分析

首先想要维护前缀和,但是233怎么办,可以假使 a 0 , 0 = 23 a_{0,0}=23 a0,0=23,那么之后也就是 a 0 , i = a 0 , i − 1 × 10 + 3 a_{0,i}=a_{0,i-1}\times 10+3 a0,i=a0,i1×10+3
那么状态矩阵是
[ 23 a 1 , 0 a 2 , 0 3 ] \left[ \begin{matrix} 23&a_{1,0}&a_{2,0}&3 \end{matrix} \right] [23a1,0a2,03]
想到转移矩阵是
[ 10 0 0 1 10 1 0 1 10 1 1 1 0 0 0 1 ] \left[ \begin{matrix} 10&0&0&1\\ 10&1&0&1\\ 10&1&1&1\\ 0&0&0&1 \end{matrix} \right] 1010100011000101111
所以
F m = F 0 × [ 10 0 0 1 10 1 0 1 10 1 1 1 0 0 0 1 ] m F_{m}=F_{0}\times \left[\begin{matrix}10&0&0&1\\10&1&0&1\\10&1&1&1\\0&0&0&1\end{matrix}\right]^m Fm=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值