矩阵快速幂优化DP
一篇比较初步的方法总结。
矩阵快速幂优化递推最经典的应用是快速求斐波那契数列的某一项,由于过于简单在这里没有什么必要提。由此引申出一类和上面一样单纯地优化递推过程的题目。经典题目如 跳房子link,用
然后就可以啦。由于
另外一种比较常见的就是 AC 自动机上套用矩阵快速幂。P3041link 在 AC 自动机那篇文章中已经说过了,有另一道题也很不错。禁忌link 同样是在自动机上 DP,但是由于希望最大化串的价值,所以有贪心的想法是说一到串末就回到起点并统计答案,同时矩阵元素的意义应当是到达这一状态的概率(期望可加)。统计答案上有一个非常常用的技巧是说在矩阵中新开一个地方用于存储答案,对于可以贡献答案的位置
还有就是图上 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;
}
自然有许多变式,一种是常见的给边加权,一般而言权会比较小。此时就可以考虑拆边,把一个点拆成一串点,相邻的点有
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架