【题解】Solution Set - 新高一矩阵选讲「陶治霖」

新高一矩阵选讲「陶治霖」

https://www.becoder.com.cn/contest/5348

一般的转移矩阵可以放在初始矩阵的前面或者后面,下面为了叙述方便分别成为:前置转移矩阵、后置转移矩阵。


「CF1970E3」Trails (Hard)

考虑 DP。

定义 \(f_{i,j}\) 表示,第 \(i\) 天走到 \(j\) 的方案数。有转移:

\[f_{i,j}=\sum_{k=1}^mf_{i-1,k}\times (s_jl_k+s_kl_j+s_js_k) \]

https://www.luogu.com.cn/article/ixp00mtq

Motivation: 为什么要设 \(w\)?因为这样可以把转移矩阵转化成两个单项式的代数和,从而通过另外两个矩阵来得到。接着通过结合律来间接实现“交换律”,从而缩小矩阵的规模。


「CF1609E」William The Oblivious

不考虑修改。

考虑 DP。

\(f_{i,j}\) 表示,前 \(i\) 位,存在 \(\text{abc}\) 的最长前缀长度为 \(j\),的最小代价。

\[\begin{aligned} f_{i,0}&=f_{i-1,0}+[s_i=a]\\ f_{i,1}&=\min\{f_{i-1,0}+[s_i\neq\text a],f_{i-1,1}+[s_i=\text b] \}\\ f_{i,2}&=\min\{f_{i-1,1}+[s_i\neq\text b],f_{i-1,2}+[s_i=\text c] \}\\ \end{aligned} \]


打住!这样的 DP 好像并没有什么用。

再仔细思考一下,如果将 a,b,c 映射到 1,2,3,不存在 abc 的子序列,根据 Dilworth 定理,就等价于不能将原序列划分为超过 \(2\) 个下降子序列。虽然但是好像还是没什么用。😅


emmmmmmmmmmmmmm,问题不大,还是回 DP 吧。

好像是 min+ 矩乘的形式,好好好,线段树维护一下矩阵应该就好了。

初始矩阵:

\[\begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix} \]

后置转移矩阵:

\[\begin{bmatrix} [s_i=\text a] & [s_i\neq\text a] & +\infty\\ +\infty & [s_i=\text b] & [s_i\neq\text b]\\ +\infty & +\infty & [s_i=\text b] \end{bmatrix} \]

(好耶!居然自己推出来了(


「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

我的实现里面矩阵是:

\[\begin{bmatrix} f_{i-1} & f_i & g_{i-1} & g_i & 1 \end{bmatrix} \]


后记:好像看到 @spdarkle 用的是 2x2 的矩阵?!?!

emmmm,其实吧,我觉得只要不超过 5 的矩阵我都是能接受的(12 的就算了吧(


「SDOI2009」HH去散步

还是邻接矩阵自乘,然后考虑剔除重边的情况。

考虑给对男方家里圣诞泛滥的能尽快就看看东方红抗生素oo

posted @ 2024-08-06 09:12  CloudWings  阅读(14)  评论(0编辑  收藏  举报