首页 > 其他分享 >矩阵快速幂优化DP

矩阵快速幂优化DP

时间:2022-12-01 11:25:34浏览次数:52  
标签:dots node 答案 矩阵 link bmatrix 优化 DP

一篇比较初步的方法总结。

矩阵快速幂优化递推最经典的应用是快速求斐波那契数列的某一项,由于过于简单在这里没有什么必要提。由此引申出一类和上面一样单纯地优化递推过程的题目。经典题目如 跳房子link,用 \(f_x\) 代表跳到 \(x\) 的方案数,用 \(F_x\) 表示 \(f\) 的前缀和,那么根据定义有 \(f_x=F_{x-n-1}\),而 \(F_x=F_{x-1}+f_x\),所以综合一下就是 \(F_x=F_{x-1}+F_{x-n-1}\),于是就可以用矩阵快速幂来做了。转移矩阵是这样的:

\[\begin{bmatrix} F_x\\F_{x-1}\\\dots\\F_{x-n} \end{bmatrix} = \begin{bmatrix} 1&0&\dots&1\\ 1&0&\dots&0\\ \dots&\dots&\dots&\dots\\ 0&\dots&1&0 \end{bmatrix} \times \begin{bmatrix} F_{x-1}\\F_{x-2}\\\dots\\F_{x-n-1} \end{bmatrix} \]

然后就可以啦。由于 \(\forall i\in[n+1],F_i=1\)(显然是这样的),所以只需要计算转移矩阵的 \(m-n-1\) 次方即可。答案是 \(F_m\)。中国象棋link 是相似的,用 \(f_x\) 代表当前位置放了的合法方案,用 \(g_x\) 代表当前位置没放的合法方案,于是有 \(f_x=g_{x-1},g_x=f_{x-1}+g_{x-1}\)。用 \(t_x\) 代表二者之和,会发现 \(t_x=2g_{x-1}+f_{x-1}=t_{x-1}+t_{x-2}\)(傻逼才会这么慢慢推,没错我就是傻逼)。边界情况:\(t_1=2,t_2=3\),矩阵快速幂去做即可。

另外一种比较常见的就是 AC 自动机上套用矩阵快速幂。P3041link 在 AC 自动机那篇文章中已经说过了,有另一道题也很不错。禁忌link 同样是在自动机上 DP,但是由于希望最大化串的价值,所以有贪心的想法是说一到串末就回到起点并统计答案,同时矩阵元素的意义应当是到达这一状态的概率(期望可加)。统计答案上有一个非常常用的技巧是说在矩阵中新开一个地方用于存储答案,对于可以贡献答案的位置 \(x\) 赋值为 \(a_{x,p}=P\),然后为了方便统计答案要搞一个 \(a_{p,p}=1\),这样就可以在答案矩阵中直接找到答案了。

还有就是图上 DP,常见形式是什么求走了多少步之后能到达哪些点。CF576D 是比较朴素的那种,显然把时间分成一些阶段,对于每个阶段的末尾求出哪些点可以到达,然后剩下的路程考虑在当前边集的基础上广搜出最短路。这里有一个 bitset 优化乘积的方法,代码如下:

struct node{bitset<N>a[N];}newone;
inline node operator *(node x,node y){
	node an=newone;
	for(int i=1;i<=m;i++)for(int j=1;j<=m;j++)
		if(x.a[i][j])an.a[i]|=y.a[j];
	return an;
}

自然有许多变式,一种是常见的给边加权,一般而言权会比较小。此时就可以考虑拆边,把一个点拆成一串点,相邻的点有 \(1\) 边,新点记为 \((x,p)\)。连一条 \(x\) 到 \(y\) 权为 \(w\) 的点可以转化成连一条 \((x,0)\) 到 \((y,w-1)\) 的边即可,然后就可以正常快速幂优化了。迷路link 是板子。WYC 差不多,不用多说。

标签:dots,node,答案,矩阵,link,bmatrix,优化,DP
From: https://www.cnblogs.com/Feyn/p/16940840.html

相关文章

  • 轮廓线 DP
    模拟赛中遇到了,被迫花了一天来学习。轮廓线DP本质上是逐格转移的状压DP,有特别经典的图可以说明:思想上非常好理解,就是把分界处的状态压缩起来。主要是实现上有许多技......
  • 稀疏矩阵之 toarray 方法和 todense 方法
    在SciPy稀疏矩阵中,有着2个经常被混为一谈的方法:toarray() 方法以及todense() 方法。事实上,我在才开始接触SciPy稀疏矩阵的时候也曾经把这2个方法之间画上等号。......
  • WordPress编辑器支持Word文档自动粘贴
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-......
  • 物联网安全——本质上是UDP RCE漏洞:tddp 协议,https://www.anquanke.com/post/id/18320
    由一道工控路由器固件逆向题目看命令执行漏洞阅读量349885|评论7|发布时间:2019-08-0116:30:06 前言2019工控安全比赛第一场的一道固件逆向的题目,好像也比......
  • 推荐两本数学方面的书籍《数学要素》和《矩阵力量》
    最近在知乎看到一个话题《线性代数到底应该怎么学?》,有位名叫生姜DrGinger的大佬写了几本相关书。对,你没看错,就是几本,看他的github,应该是7本了,其中两本的草稿已经比较稳定,正......
  • 一个关于序列的游戏——DP综合题
    题目有一个序列,你可以在上面删除符合要求的连续段若干次。每次删除都会得到连续段长度对应的分数。需要符合的要求为:1、相邻两个元素相差为12、如果某个元素不在连续段......
  • 十进制矩阵乘法优化DP
    十进制矩乘优化DPP1397[NOI2013]矩阵游戏题目描述婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的\(n\)行\(m\)列的矩阵(你不用担心她如何存储)。她生成......
  • 常见DP类型
    常见DP类型第一节:线性DP思想:DP是作用在线性空间上的递推——DP的阶段按照各个维度线性的增长,从一个或多个边界点开始有方向的向整个状态空间转移扩展,最后在每个状态上保......
  • DP的环形and后效性处理
    环形与后效性处理环形处理:即我们需要在一个环上进行DP这种问题一般有两种处理方法1.执行2次DP,在第一次DP时将问题随便找个点断开当成线性问题处理,第二次DP的时候通过对......
  • 常见DP优化
    倍增优化DP在线性DP中,我们一般是按照阶段将DP的状态线性增长,但是我们可以运用倍增思想,将线性增长转化为成倍增长对于应用倍增优化DP,一般分为两个步骤1.预处理,我们使用......