【Note】矩阵加速
感谢 \(\text{tidongCrazy}\) 倾情授课。
基本形式
\]
把递推需要用到的项全部存进矩阵里面,固定的系数则放在转移矩阵里面。最后的那个\(g\),其实可以认为是另外一个(或者多个)递推数列,它涉及了\(f\)的转移,于是一起放在矩阵里面,并且它也实时转移更新着。
比如转移项里面可以有\(3^n\),\(n\)。\(3^n\)到\(3^{n+1}\)的转移只需要带个系数\(3\),而\(n\)到\(n+1\)的转移,我们需要多带一列\(1\)。
基础习题
最简单的一维多阶递推。
P1962 斐波那契数列(例题)
P4838 P哥破解密码(矩阵加速)
稍微up
P1397 [NOI2013] 矩阵游戏(矩阵加速)
处理每一行递推到最后的矩阵,加一个从这一行末尾递推到下一行第一个位置的矩阵,对这个组合快速幂。
P3216 [HNOI2011]数学作业(矩阵加速)
\]
发现这个\(T(i)\)不好处理,看看\(n\)才\(10^{18}\),直接跑\(18\)个不同的矩阵。
图论\(\times\)矩阵
大致做法是这样的。在一个图里面跑,题目涉及的路径长度非常大的时候适用。
由\(t-1\)阶的答案扩展到\(t\)阶的答案,需要多扩展一条边。设\(f^t_{i,j}\)表示\(i->j\),走\(t\)步的方案数。则
\]
跟矩乘的形式相符,可以以\(1\)阶矩阵为转移矩阵爆加速。
另一个理解则是,这个\(1\)阶的\(01\)矩阵是该图的邻接矩阵,当\(k->j\)有连边时,就能为\(f^{t}_{i,j}\)贡献\(f^{t-1}_{i,k}\)的方案数。
P2233 [HNOI2002]公交车路线(图论与矩阵结合)
P2151 [SDOI2009] HH去散步(有限制的路径计数)
这个限制的做法是,把一条边拆成两个点(表示双向的边)。做完了(
P4159 [SCOI2009] 迷路(图论中邻接矩阵的巧妙转化)
这个边权最多只有\(9\),那我们存储相邻\(9\)阶的信息到一个矩阵里。
...........等一下,这样能做么...
题解给的方法是把一条边暴拆成双向各九个,没了(
分组矩阵
矩阵变化的周期很小,把周期内的每个矩阵处理出来,合在一起快速幂就行了。
P2579 [ZJOI2005]沼泽鳄鱼(分组矩阵优化)
P3821 Isaac(分组矩阵优化)
相比上一题加个二分就好啦。
矩阵乘法变形
P5678 [GZOI2017]河神(矩阵乘法变形)
这俩运算符性质很好,看看下面矩阵乘法结合律的证明吧。
注意与运算的单位是\(111111111\)(
CF576D Flights for Regular Customers(矩阵乘法优化)
按\(d_i\)排序,每次跑到下一个\(d_i\)就加边改矩阵。
由于只需要可行性,可以改成\(01\),位运算,然后bitset压一下。
怎么还有题需要bitset卡个64的
P6569 [NOI Online #3 提高组] 魔法值(矩阵乘法变形+优化)
关于矩阵乘法结合律的证明(sun123zxy)
与和或运算显然是满足的。
然后就是这题奇怪的优化,像我这种从来把\(log\)当作不存在的人就已经寄了。
光速幂
杂记
还可以做类似一个结构体内,一些变量相互加减之类变化的运算。
D - Binary Representations and Queries
第一步结论我甚至暂时不会证。
后一步则是让两个元素一一对应的集合(其实就是一对一对的),每次让一边元素加上另一边与之对应元素的值。
这个只是矩阵乘法,而不是矩阵加速(
P7453 [THUSCH2017] 大魔法师
又想提一嘴矩阵的运算律,我一直没搞得比较清楚。
矩阵运算律
矩阵线性运算
(1) 矩阵加法
交换律:\(A+B=B+A\)
结合律:\((A+B)+C=A+(B+C)\)
(2) 矩阵数乘
结合律:\(\lambda\mu A=\lambda(\mu A)\)
分配率 \(1\):\(\lambda(A+B)=\lambda A+\lambda B\)
分配率 \(2\):\((\lambda+\mu)A=\lambda A+\mu A\)
矩阵乘法
结合律 \(1\):\((AB)C=A(BC)\)
结合律 \(2\):\(\lambda (AB)=(\lambda A)B=A(\lambda B)\)
分配率:\(A(B+C)=AB+AC\),\((B+C)A=BA+CA\)
这题是在线段树上做区间乘矩阵,区间覆盖,区间加,区间乘。后三个运算分别对矩阵不同对象。
满足了上述一系列优秀的性质,来考虑怎么打 \(tag\)。
回归最一般的线段树区间乘与区间加。
比如标记 该节点需要先 \(\times a\) 再 \(+b\),子节点已有的标记是需要先 \(\times c\) 再 \(+d\),那么子节点:
E&=(E\times c+d)\times a+b\\
&=E\times(c\times a)+d\times a+b
\end{aligned}
\]
那么子节点的 \(c\) 就该变成 \(c\times a\), \(d\) 变成 \(d\times a+b\)。
类比标记打法:该节点需要 \(\times P\) 后分别 $\times v\ ,+k\ ,\ $覆盖
一种方法是拆成乘与加矩阵(\(3\times 3\) 矩阵),另一种是全部拆成乘矩阵。后者(\(4\times 4\) 矩阵,加了一列常数项)应该是好写很多的,但不知道会不会复杂度爆炸(
哦我草,\(5s\) 啊,那没事了,我傻逼了,比上面那个还好写(?)
【Note】矩阵加速的更多相关文章
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks dp+矩阵加速
题目链接: http://codeforces.com/problemset/problem/621/E E. Wet Shark and Blocks time limit per test2 se ...
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- HDU 5564 Clarke and digits 状压dp+矩阵加速
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5564 题意: 求长度在[L,R]范围,并且能整除7的整数的总数. 题解: 考虑最原始的想法: dp[ ...
- 【 CodeForces - 392C】 Yet Another Number Sequence (二项式展开+矩阵加速)
Yet Another Number Sequence Description Everyone knows what the Fibonacci sequence is. This sequence ...
- 【HDU 3483】 A Very Simple Problem (二项式展开+矩阵加速)
A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- 【HDU3802】【降幂大法+矩阵加速+特征方程】Ipad,IPhone
Problem Description In ACM_DIY, there is one master called “Lost”. As we know he is a “-2Dai”, which ...
- C++矩阵加速经典题目:Warcraft III 守望者的烦恼 [vijos 1067]
Warcraft III 守望者的烦恼 背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫"闪烁", ...
- LuoGu P1939 【模板】矩阵加速(数列)
板子传送门 矩阵快速幂学完当然要去搞一搞矩阵加速啦 (矩阵加速相对于矩阵快速幂来说就是多了一个构造矩阵的过程) 关于怎样来构造矩阵,这位大佬讲的很好呢 构造出矩阵之后,我们再去用矩阵快速幂乘出来,取[ ...
- Luogu P3390 【模板】矩阵快速幂&&P1939 【模板】矩阵加速(数列)
补一补之前的坑 因为上次关于矩阵的那篇blog写的内容太多太宽泛了,所以这次把一些板子和基本思路理一理 先看这道模板题:P3390 [模板]矩阵快速幂 首先我们知道矩阵乘法满足结合律而不满足交换律的一 ...
- P1939【模板】矩阵加速(数列)
P1939[模板]矩阵加速(数列)难受就难受在a[i-3],这样的话让k=3就好了. #include<iostream> #include<cstdio> #include& ...
随机推荐
- 连接打印机Lodop
<div class="panel-body"> <div class="row show-grid"> <div class=& ...
- 如何运用Vue自定义组件以及组件的传值
Vue自定义组件 引入组件 首先在项目内的components新建.vue文件. 创建完成之后搭建完整的框架.其实就是新建组件,在此之前,需要在VScode中引入一个插件(vue 2 snippets ...
- 导入ssm项目时,项目基本的配置文件
一.ssm框架基本的配置文件 上面的这些配置文件对于比较简单的ssm项目其实大同小异,逻辑上是差不多的. 在config目录下 在lib下就是各种jar包 二.导入ssm项目后,本地环境配置和项目本身 ...
- Ubuntu实战
Ubuntu是什么 Ubuntu早期是一个由Debian Linux发展起来的以桌面应用为主的操作系统.作为Linux发行版中的后起 之秀,Ubuntu Linux在短短几年时间里便迅速成长为从Lin ...
- openstack安装部署私有云详细图文
本文主要分享的是云计算.openstack的使用.私有云平台建设.云服务器云硬盘的构建和使用.从基本概念入手到私有云建设,信息量非常大.对于openstack的安装部署都是从官方文档中一步步的介绍,内 ...
- Oracle账户被锁住,解锁
转载自:https://blog.csdn.net/weixin_43464743/article/details/121226334 方法一PLSQL解锁1.用dba用户登录plsql.2.左侧选择 ...
- vue中的普通函数与箭头函数以及this关键字
普通函数 普通函数指的是用function定义的函数 var hello = function () { console.log("Hello, Fundebug!"); } 箭头 ...
- 循环文件夹汇总所有下载发票的Excel文件数据
Dim a As String, n As Integer, wbs As Workbook ThisWorkbook.Sheets(1).Cells.Clear a = Dir(ThisWorkbo ...
- vue打包记录
这里的确是css以及js文件的路径问题,但解决时并不需要手动改路径或者加一段判断去修改,最方便的办法时在项目打包前的vue.config.js里面将publicPath属性添加或者修改为 public ...
- java 转换指定文件夹文件编码工具
import java.io.*; public class test { public static void main(String[] args) { printFiles(new File(& ...