#edu2071. 【例题】矩阵乘法应用
【例题】矩阵乘法应用
矩阵乘法应用
1. Fibonacci Number
【题意简化】求斐波那契数列前 项的和,取 的余数。
【分析】由 和 可以构造矩阵乘法:
$\begin{bmatrix} S_n \\ f_n\\ f_{n-1} \end{bmatrix}= \begin{bmatrix} 1 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 1 & 0 \end{bmatrix}\begin{bmatrix} S_{n-1} \\ f_{n-1} \\ f_{n-2} \end{bmatrix}$
2. 定长路径条数统计 walk
【题意简化】
给一个 阶有向图,每条边的边权均为 ,然后给一个整数 ,你的任务是对于所有点对 求出从 到 长度为 的路径的数量(不一定是简单路径,即路径上的点或者边可能走多次)。
【分析】
当 , 要算所有长度为 路径的条数,实际就是枚举 到 长度为 的条数,即从 走到 ,再从 走到 , 就是表示 到 长度是 的方法数,那么长度为 的方法数就是 , 我们发现了矩阵乘法的影子,对于邻接表 , 就是 ,依次类推长度为 就是 , 长度为 就是 .
利用矩阵快速幂,求出 , 要枚举所有起点终点,最后要求 ,其中 代表 第 行第 列值。
参考代码:点击
3. 定长最短路 [USACO07NOV] Cow Relays G
【题意简化】
给你一个 阶加权有向图和一个整数 。对于每个点对 找到从 到 的恰好包含 条边的最短路的长度。(不一定是简单路径,即路径上的点或者边可能走多次)
【分析】 广义矩阵乘法,也是 动态DP 基础。
我们可以构造图的领接矩阵 , 表示表示 到 的边权,如果没有变, (有重边的情况取边权最小值)。对于 的情况,转移方程就是
进而可以得到
$L_{k+1}[i,j]=\min_{1\le p \le n}\{L_k[i,p]+G[p,j]\}$
类比矩阵乘法,我们我们发现上述转移只是矩阵乘法的乘积求和编程相加取最小值,可以重新定义矩阵乘法,得到广义矩阵乘法 ,即 表示
于是有
展开得到
具有结合律,可以使用矩阵快速幂求解,时间复杂度为
4. P5364 [SNOI2017]礼物
【题意简化】
第一个朋友会带给他 个大香蕉,之后,每一个朋友到来以后,都会带给他之前所有人带来的礼物个数再加他的编号的 次方那么多个。已知 , 请输出第 个朋友送的礼物个数对 取模的结果。
【分析】
根据题意设 表示第 个小朋友的礼物数量,可以得到:
,设 , 可以得到
比较小,可得:
可以构造矩阵乘法:
$\begin{bmatrix} S_{i-1}&i^k&i^{k-1}&...&i^0 \end{bmatrix} \begin{bmatrix} 2 & 0 & 0 & 0 & . & 0 \\ 1 & C_k^k & 0 & 0 & . & 0\\ 0 & C_k^{k-1}& C_{k-1}^{k-1} & 0 & . & 0\\ 0 & C_k^{k-2}& C_{k-1}^{k-2} & C_{k-2}^{k-2} & . &0 \\ . & . & . & . & . & \\ 0 & C_k^{0} & C_{k-1}^{0} & C_{k-2}^{0} & . & C_0^0 \end{bmatrix}$
=$\begin{bmatrix} S_{i}&(i+1)^k&(i+1)^{k-1}&...&(i+1)^0 \end{bmatrix}$
参考代码:点击
5. [THUSC 2017] 大魔法师
6. LOJ 6208 树上询问
其他题目
学习完毕
{{ select(1) }}
- YES
- NO