感觉该学点基础了。
E
考虑状态换维。
J
合并无用状态。发现只需要关心不同寿司个数的盘子的数量,所以设 $f[a][b][c]$ 表示当前还剩下 $a/b/c/(n - a- b - c)$ 盘有 $0/1/2/3$ 个寿司。
O
设 $f_S$ 表示前 $k$ 个男人和包含在 $S(|S| =k)$ 中的女人配对的方案数,枚举和第 $k$ 个男人匹配的女人转移。
R
基本套路:$A$ 为邻接矩阵,求出 $A ^ k$,第 $i$ 行第 $j$ 列即为从 $i$ 到 $j$ 经过 $k$ 步的方案数。
S
首先 $[l, r] = [1, l - 1] - [1,r]$。数位 dp 设状态:$f[i][\cdots][lim][zero]$ 表示考虑到第 $i$ 高位,$\cdots$ 部分依题意而定,$lim$ 表示前 $i$ 高位是否都和 $r$ 相等(用于处理不要超出右边界),$zero$ 表示是否到第 $i$ 位为止全都是 $0$(用于处理前导 $0$),可以根据题意精简状态。
T
排列计数的手法,考虑排名:设 $f_{i, j}$ 是考虑到第 $i$ 位,上一个数在前面的位置中为第 $j$ 小的数。
U
通过子集的贡献来转移。
W
按照右端点排序,当访问到某个区间的右边界时才计算其贡献。设 $f_{i, j}$ 是前 $i$ 个位置,最后一个 $1$ 在 $j$ 的最大分数:
$$ f_{i, j} = f_{i - 1, j} + \sum_{l_k \leq j, r_k = i} v_k(j < i) \\ f_{i, i} = \max_{j = 1} ^ {i - 1} f_{i - 1, j} + \sum_{l_k \leq i, r_k = i}v_k $$
转变视角:不要考虑每个 $j$,而是考虑每个区间的贡献。显然其会对 $[l_k, r_k]$ 的 $j$ 造成贡献。以 $1 \sim j$ 为下标,把 $f$ 扔到线段树上。
X
通过邻项交换贪心确定物品的顺序,跑 01 背包。
Y
考虑只存在一个障碍 $(r, c)$:容斥得到 $\binom{H + W - 2}{H- 1} - \binom{r + c - 2}{r - 1} \times \binom{H - r + W - c}{H - r}$。设 $f_i$ 为走到第 $i$ 个障碍,且途中没有经过别的障碍的方案数。类似的容斥一下:$f_i = \binom{r_i - c_i - 2}{r_i - 1} - \sum_{j = 1} ^ {i - 1} f_j \times \binom{r_i - r_j + c_i - c_j}{r_i - r_j}$。