LOADING

加载过慢请开启缓存 浏览器默认开启

矩乘优化/状压DP选题讲解

标题均是超链接,点击直接就可以跳转到对应题目。
折叠块,点一下可以展开,再点一下可以收起。
代码的作用是用来给你们思考细节的,不是用来抄或者贺的。

矩乘优化

在正式开始讲状压DP前,我们先讲一下矩乘优化。因为我选的第一道题要用到,这个也是一个挺重要的DP优化。

矩乘优化一般用于线性递推的转移方程。

矩阵乘法

首先,我并不知道你们当前对于矩阵有什么了解程度,因此我就先从矩阵乘法开始讲起。
矩阵乘法,顾名思义就是对矩阵进行乘法运算。

我们定义:只有当第一个矩阵的列数,等于第二个矩阵的行数时,这两个矩阵才能相乘。

简单地说,其实就是答案矩阵的第 \((i,j)\) 元素,等于第一个矩阵第 \(i\) 行的元素,依次乘上第二个矩阵第 \(j\) 列的元素的和。
写成数学形式,也就是: \[ C_{i,j}=\sum_{k=1}^{n}A_{i,k}B_{k,j} \]

代码实现起来也很容易,也就是下面这样:

容易发现,矩阵乘法是有结合律的,也就是 \(A\times B\times C=A\times (B\times C)\)
因此 \(A\times \underbrace{B\times B\times B\dotsb\times B}_{n个B}=A\times(B\times B\times B\dotsb\times B)=A\times B^{n}\)
\(B^{n}\) 同样按照结合律,是可以快速幂的。

写起来就是这样的:


你会发现形式其实和普通的快速幂是很像的。


好了,那现在就正式进入矩乘优化
我们拿这道典题开始。

P1962 斐波那契数列

题目就是让你求斐波那契数列的第 \(n\) 项对 \(10^{9}+7\) 取模的值。
\(1\le n <2^{63}\)

我们再来一道题,练习一下。

P3216 [HNOI2011] 数学作业

状压DP

P5255 [JSOI2013] 美丽家园

先来一道比较简单的题起手。
相信你们很快就能切了。

P2396 yyy loves Maths VII

著名奆佬 gwx 说这就是卡常题。

我因为太菜没有正确分析 时间复杂度,还被嘲讽了/kk
那你们就可以作为一种卡常方法吧awa。
这道题比上道还简单,你们应该切的更快吧awa

P2150 [NOI2015] 寿司晚宴

这题很有意思啊。
是 NOI2015 D2T2
大家都比我强qwq,应该很快也能切掉。

P4460 [CQOI2018] 解锁屏幕

原先的最后一道题,黄老师说太难了,就换成了这道题,有时间的话可以给你们讲一下。

CF1569F Palindromic Hamiltonian Path

最后一道题喽。
比较难哦awa