第二十八次
高情商:题目未按难度排序,请自行决定开题顺序
低情商:都是紫题,自己看着办吧
A
设 $a_{i,0/1}$ 表示第 $i$ 层的两个门,$f_{i,0/1}$ 表示从起点走到第 $i$ 层的两个门的最短路,
则有 $f_{i,j}=\min\limits_{k=0}^if_{i-1,k}+d(a_{i-1,k},a_{i,j})$,其中 $d(a_{i-1,k},a_{i,j})$ 表示 $a_{i-1,k}$ 到 $a_{i,j}$ 的最短路,这个容易 $O(1)$ 求出。
每次 $O(n)$ 地跑一遍 DP 复杂度太高,考虑动态 DP,则有
$$ \begin{bmatrix} f_{i-1,0}&f_{i-1,1} \end{bmatrix} \times \begin{bmatrix} d(a_{i-1,0},a_{i,0})&d(a_{i-1,0},a_{i,1})\\ d(a_{i-1,1},a_{i,0})&d(a_{i-1,1},a_{i,1}) \end{bmatrix} = \begin{bmatrix} f_{i,0}&f_{i,1} \end{bmatrix} $$
$\times$ 是 $(\min,+)$ 矩乘,线段树维护区间矩阵乘积即可。
B
设 $f_i$ 表示第 $i$ 块玻璃向下发出的光,$g_i$ 表示第 $i$ 块玻璃向上发出的光,
则有 $f_i=a_if_{i-1}+b_ig_{i+1},g_i=b_if_{i-1}+a_ig_{i+1}$,
设 $\Delta f_i=\dfrac{f_i}{f_{i-1}},\Delta g_i=\dfrac{g_i}{f_{i-1}}$,则有 $\Delta f_i=a_i+\dfrac{b_ig_{i+1}}{f_{i-1}}=a_i+\dfrac{b_i\Delta g_{i+1}f_i}{f_{i-1}}=a_i+b_i\Delta g_{i+1}\Delta f_i$,即 $f_i=\dfrac{a_i}{1-b_i\Delta g_{i+1}}$,
且有 $\Delta g_i=b_i+\dfrac{a_ig_{i+1}}{f_{i-1}}=\dfrac{a_i\Delta g_{i+1}f_i}{f_{i-1}}=a_i\Delta g_{i+1}\Delta f_i$。
倒序递推 $\Delta f,\Delta g$ 即可。
C
发现得到的队列即为添加序列的前缀最大值序列,于是考虑怎样的前缀最大值序列 $s$ 是合法的,
考虑 $s$ 的每一位何时取到最小值,可以发现把原序列从小到大排序得到 $\{a_n\}$ 作为添加序列时,可以取到 $s_i=a_i$,
所以 $s$ 不降,且 $s_i\ge a_i$ 时 $s$ 合法。设 $f_{i,j}$ 表示 $s$ 填到第 $i$ 位,最后一位为 $j$ 的方案数,
则有 $f_{i,j}=\sum\limits_{k=1}^jf_{i-1,k}|j\ge a_i$,前缀和优化即可。
D
答案即为放 $n$ 个互不攻击的车,阴影不能放的方案数。
设 $f_i$ 表示在阴影里放 $i$ 个车的方案数,
则钦定某 $i$ 个车放在阴影里,剩下随便放的方案数有 $f_i(n-i)!$ 种,
考虑容斥,则答案为 $\sum\limits_{i=0}^n(-1)^if_i(n-i)!$,问题变为算 $f$。
同行同列的车不能选,因此 $f_i$ 即上图大小为 $i$ 的独立集个数。
把这些链连起来,则 $f_i$ 即在连出的链上选 $i$ 个点,连接处可以相邻,其他位置不能相邻的方案数,容易 DP。