【题解】Solution Set - 新高一矩阵选讲「陶治霖」
新高一矩阵选讲「陶治霖」
https://www.becoder.com.cn/contest/5348
一般的转移矩阵可以放在初始矩阵的前面或者后面,下面为了叙述方便分别成为:前置转移矩阵、后置转移矩阵。
「CF1970E3」Trails (Hard)
考虑 DP。
定义 \(f_{i,j}\) 表示,第 \(i\) 天走到 \(j\) 的方案数。有转移:
https://www.luogu.com.cn/article/ixp00mtq
Motivation: 为什么要设 \(w\)?因为这样可以把转移矩阵转化成两个单项式的代数和,从而通过另外两个矩阵来得到。接着通过结合律来间接实现“交换律”,从而缩小矩阵的规模。
「CF1609E」William The Oblivious
不考虑修改。
考虑 DP。
设 \(f_{i,j}\) 表示,前 \(i\) 位,存在 \(\text{abc}\) 的最长前缀长度为 \(j\),的最小代价。
打住!这样的 DP 好像并没有什么用。
再仔细思考一下,如果将 a,b,c
映射到 1,2,3
,不存在 abc
的子序列,根据 Dilworth 定理,就等价于不能将原序列划分为超过 \(2\) 个下降子序列。虽然但是好像还是没什么用。😅
emmmmmmmmmmmmmm,问题不大,还是回 DP 吧。
好像是 min+ 矩乘的形式,好好好,线段树维护一下矩阵应该就好了。
初始矩阵:
后置转移矩阵:
(好耶!居然自己推出来了(
「CF1458C」Latin Square
还是有点考思维,对于矩阵中的每一个元素我们维护:\((x,y,z)\) 表示她在原矩阵中的位置和值。
每次更新 \(O(1)\) 维护一下每一维的增量,最后统一算。
https://www.luogu.com.cn/article/cv0ox3lk
「CF593E」Strange Calculation and Cats
感觉难度虚高(?
\(n\times m\le20\)?直接将所有点的方案数保存在一个矩阵里面,然后每次操作的时候对应不同的一个转移矩阵。
设每次操作间 \(i\) 的差值为 \(d_i\)。有 \(\sum d_i\le 10^9\)
则,时间复杂度为 \(O((nm)^3\sum\log d_i)=O((nm)^3\log(\prod d_i))\)
由均值不等式,当所有 \(d_i\) 相等时,\(\prod d_i\) 取最大值。
则,最坏时间复杂度为 \(O((nm)^3\log(\prod\frac {10^9}T))=O((nm)^3T\log(\frac {10^9}T))\approx1,328,771,237\)
这 nm 4s 也跑不过啊,但是 std 是这样,我们也没办法,只能相信 CF 神机了(本地卡满的话 10s 跑不出来(
「CF837F」Prefix Sums
做 \(i\) 次前缀和,可以理解成高维前缀和,于是每一位的贡献就是组合数(?https://www.luogu.com.cn/article/pe2tw8uk
或者生成函数理解?
感性理解一下,如果 \(A_0\) 里面非零的元素很多,那么 \(A_{i,n}\) 增长的一定很快。具体的当这个值 \(>10\) 的时候就可以暴力了。
否则的话,可以二分答案,这个时候 \(n<10\),check 的时候就可以矩阵加速了。
「CF51E」Pentagon
用一张图的邻接矩阵自乘 \(k\) 次,对应点 \((i,j)\) 即为从 \(i\) 到 \(j\) 经过路径长度为 \(k+1\) 的方案数。
特别的 \((i,i)\) (主对角线)上的和除以 \(k+1\),即为 \(k+1\) 元 “环” 的个数。(这里的环打引号是因为环上可能有重边。
证明其实也比较显然。其实是一个 dp 的过程。
设 \(f_k(i,j)\) 为第 \(k\) 次自乘后的矩阵。
则有转移:
\[f_k(i,j)=\sum_{t=1}^nf_{k-1}(i,t)\times f_0(t,j) \]然后,我们发现这就是矩阵乘法,就完了。
然后这道题求五元环的话,就要去除所有的三元环就可以了。
「GXOI/GZOI2019」 逼死强迫症
考虑 DP。
\(f[i][0/1][0/1][j]\):前 \(i\) 个,第 \(i\) 位的上面/下面是否空位,用掉了 \(j\) 个 \(1\times 1\)。
不想再抄一遍转移方程了😭(好难崩
https://www.luogu.com.cn/record/171025316
然后就有一个 \(O(12^3\log n)\) 的做法,但是非常非常非常的难写,实际上也有人这么做了:https://www.luogu.com.cn/article/rl04j4ml
还是学学题解吧。
设 \(g_i\) 为斐波拉契数列,\(h_i\) 为其前缀和。
则有:\(h_i=g_{i+2}-1\)。
证明:
考虑数学归纳法。
假设该等式对 \(i\le m\) 成立,那么对于 \(i=m+1\):
\(h_m=g_{m+2}-1\Rightarrow h_{m}+g_{m+1}=g_{m+2}+g_{m+1}-1\Rightarrow h_{m+1}=g_{m+3}-1\)
https://www.luogu.com.cn/article/wkm5np6x
我的实现里面矩阵是:
后记:好像看到 @spdarkle 用的是 2x2 的矩阵?!?!
emmmm,其实吧,我觉得只要不超过 5 的矩阵我都是能接受的(12 的就算了吧(
「SDOI2009」HH去散步
还是邻接矩阵自乘,然后考虑剔除重边的情况。
考虑给对男方家里圣诞泛滥的能尽快就看看东方红抗生素oo