矩阵

引入

矩阵的引入来源于线性方程组,例如:

\[\begin{cases} 7x_1 + 8x_2 + 9x_3 = 13\\ 4x_1 + 5x_2 + 6x_3 = 12\\ x_1 + 2x_2 + 3x_3 = 11 \end{cases} \]

写成矩阵的形式:

\[\begin{pmatrix} 7 & 8 & 9\\ 4 & 5 & 6\\ 1 & 2 & 3 \end{pmatrix} \times \begin{pmatrix} x_1\\ x_2\\ x_3 \end{pmatrix} = \begin{pmatrix} 13\\ 12\\ 11 \end{pmatrix} \]

这体现了一种对数据打包处理的思想,同时也体现了矩阵乘向量的运算法则。

矩阵乘法

类似的,我们引入矩阵乘法的定义。

\(A\)\(n\)\(m\) 列的矩阵, \(B\)\(m\)\(k\) 列的矩阵,那么 \(A, B\) 矩阵可以相乘,结果为 \(n\)\(k\) 列的 \(C\) 矩阵,其中:

\[C_{i, j} = \sum_{t = 1}^{m} A_{i, t}\times B_{t, j} \]

矩阵乘法满足结合率,但不满足交换率。

矩阵加法

对应位置相加即可。

满足分配律。

矩阵转置

矩阵的转置,就是在矩阵的右上角写上转置「T」记号,表示将矩阵的行与列互换。

对称矩阵转置前后保持不变。

特殊矩阵

单位矩阵

一般用 \(I\) 表示,其对角线上值为 \(1\) ,其余地方值为 \(0\)

任意矩阵乘以单位矩阵后的结果等于原矩阵。

三角矩阵

如果方阵主对角线左下方的元素均为 \(0\) ,称为上三角矩阵。如果方阵主对角线右上方的元素均为 \(0\) ,称为下三角矩阵。

两个上(下)三角矩阵的乘积仍然是上(下)三角矩阵。如果对角线元素均非 \(0\) ,则上(下)三角矩阵可逆,逆也是上(下)三角矩阵。

应用

矩阵加速递推

以斐波那契数列为例,其递推关系写成矩阵:

\[\begin{pmatrix} f_i\\ f_{i - 1} \end{pmatrix} = \begin{pmatrix} 1 & 1\\ 1 & 0 \end{pmatrix} \times \begin{pmatrix} f_{i - 1}\\ f_{i - 2} \end{pmatrix} \]

那么有:

\[\begin{pmatrix} f_i\\ f_{i - 1} \end{pmatrix} = \begin{pmatrix} 1 & 1\\ 1 & 0 \end{pmatrix}^{i - 2} \times \begin{pmatrix} f_{2}\\ f_{1} \end{pmatrix} \]

矩阵表达修改

大魔法师小 L 制作了 \(n\) 个魔力水晶球,每个水晶球有水、火、土三个属性的能量值。小 L 把这 \(n\) 个水晶球在地上从前向后排成一行,然后开始今天的魔法表演。

我们用 \(A_i,\ B_i,\ C_i\) 分别表示从前向后第 \(i\) 个水晶球(下标从 \(1\) 开始)的水、火、土的能量值。

小 L 计划施展 \(m\) 次魔法。每次,他会选择一个区间 \([l, r]\) ,然后施展以下 \(3\) 大类、 \(7\) 种魔法之一:

魔力激发:令区间里每个水晶球中 特定属性 的能量爆发,从而使另一个 特定属性 的能量增强。具体来说,有以下三种可能的表现形式:

火元素激发水元素能量:令 \(A_i = A_i + B_i\)

土元素激发火元素能量:令 \(B_i = B_i + C_i\)

水元素激发土元素能量:令 \(C_i = C_i + A_i\)

需要注意的是,增强一种属性的能量并不会改变另一种属性的能量,例如 \(A_i = A_i + B_i\) 并不会使 \(B_i\) 增加或减少。

魔力增强:小 L 挥舞法杖,消耗自身 \(v\) 点法力值,来改变区间里每个水晶球的 特定属性 的能量。具体来说,有以下三种可能的表现形式:

火元素能量定值增强:令 \(A_i = A_i + v\)

水元素能量翻倍增强:令 \(B_i=B_i \cdot v\)

土元素能量吸收融合:令 \(C_i = v\)

魔力释放:小 L 将区间里所有水晶球的能量聚集在一起,融合成一个新的水晶球,然后送给场外观众。生成的水晶球每种属性的能量值等于区间内所有水晶球对应能量值的代数和。需要注意的是,魔力释放的过程不会真正改变区间内水晶球的能量。

值得一提的是,小 L 制造和融合的水晶球的原材料都是定制版的 OI 工厂水晶,所以这些水晶球有一个能量阈值 \(998244353\) 。当水晶球中某种属性的能量值大于等于这个阈值时,能量值会自动对阈值取模,从而避免水晶球爆炸。

小 W 为小 L(唯一的)观众,围观了整个表演,并且收到了小 L 在表演中融合的每个水晶球。小 W 想知道,这些水晶球蕴涵的三种属性的能量值分别是多少。

定长路径统计

给一个 \(n\) 阶有向图,每条边的边权均为 \(1\) ,然后给一个整数
\(k\) ,你的任务是对于所有点对 \((u,v)\) 求出从 \(u\)\(v\) 长度为 \(k\) 的路径的数量(不一定是简单路径,即路径上的点或者边可能走多次)。

我们将这个图用邻接矩阵 \(G\) (对于图中的边 \((u\to v)\) ,令 \(G[u,v]=1\) ,其余为 \(0\) 的矩阵;如果有重边,则设 \(G[u,v]\) 为重边的数量)表示这个有向图。

考虑用 dp 求解,设 \(C_{k}[i, j]\) 表示所有从 \(i\)\(j\) 的路径中长度为 \(k\) 的路径数量。

转移有:

\[C_{k + 1}[i, j] = \sum_{t = 1}^n C_{k}[i, t]\times G[t, j] \]

用矩阵表示 \(C_{k + 1} = C_{k}\times G\)

直接快速幂即可。

限长路径计数

给一个 \(n\) 阶有向图,每条边的边权均为 \(1\) ,然后给一个整数
\(k\) ,你的任务是对于所有点对 \((u,v)\) 求出从 \(u\)\(v\) 长度为 \(k\) 的路径的数量(不一定是简单路径,即路径上的点或者边可能走多次)。

对于点 \(v\) 建立虚点 \(v'\) 统计答案,建边 \(v\to v', v'\to v'\)

差分约束

定义

差分约束系统 是一种特殊的 \(n\) 元一次不等式组,它包含 \(n\) 个变量 \(x_1, x_2, \dots, x_n\) 以及 \(m\) 个约束条件,每个约束条件是由两个其中的变量做差构成的,形如 \(x_i - x_j\leq c_k\) ,其中 \(1 \leq i, j \leq n, i \neq j, 1 \leq k \leq m\) 并且 \(c_k\) 是常数(可以是非负数,也可以是负数)。我们要解决的问题是:求一组解 \(x_1=a_1,x_2=a_2,\dots,x_n=a_n\) ,使得所有的约束条件得到满足,否则判断出无解。

简单变换得到 \(x_i\le x_j + c_k\) ,这和最短路中 \(dis_y\le dis_x + w\) 的 性质非常相似,因此用最短路解决。

具体的从 \(j\)\(i\) 连接一条权值为 \(c_k\) 的边即可,之后从 \(0\) 向每个点连接权值为 \(0\) 的 边,如果图存在负环,显然无解。

使用 SPFA 判负环,之后跑单源最短路。

应用

Tehran 的一家每天 \(24\) 小时营业的超市,需要一批出纳员来满足它的需要。超市经理雇佣你来帮他解决问题——超市在每天的不同时段需要不同数目的出纳员(例如,午夜时只需要一小批,而下午则需要很多)为顾客提供优质服务。他希望雇佣最少数目的出纳员。

经理已经提供给你一天的每一小时需要出纳员的最少数量—— \(R(0), R(1), R(2), ..., R(23)\)\(R(0)\) 表示从午夜到上午 1:00 需要出纳员的最小数目, \(R(1)\) 表示上午 1:00 到 2:00 需要的,等等。每一天,这些数据都是相同的。有 \(N\) 人申请这项工作,每个申请者 \(i\) 在每 \(24\) 小时中,从一个特定的时刻开始连续工作恰好 \(8\) 小时,定义 为上面提到的开始时刻。也就是说,如果第 个申请者被录取,他(她)将从 时刻开始连续工作 \(t_i\) 小时。

请你编写一个程序,输入 \(R(i)\)\(t_i\) ,它们都是非负整数,计算为满足上述限制需要雇佣的最少出纳员数目。在每一时刻可以有比对应的 \(R(i)\) 更多的出纳员在工作。

\(s_i\) 表示 \(0\)\(i\) 点,共有多少个收纳员来上班。

考虑限制。

最显然的限制 \(s_{i} - s_{i - 1}\ge 0\)

设第 \(i\) 个时刻能来上班的员工有 \(cnt_i\) 个人,显然有 \(s_i - s_{i - 1}\le cnt_i\)

考虑 \(R(i)\) 的限制,我们简单分类讨论:

对于 \(i\in[7, 23]\) ,限制为 \(R(i)\le s_i - s_{i - 7}\)

对于 \(i\in[0, 6]\) ,设总共雇用了 \(x\) 个人,限制为 \(R(i)\le s_i + (x - s_{i + 17})\)

直接枚举 \(x\) 判断有无解即可。

posted @ 2024-07-23 11:47  KafuuChinocpp  阅读(60)  评论(0)    收藏  举报