2025.9.28+7

2025.9.28

Luogu P1545

你考虑对于区间 \([s_i, e_i]\),其端点显然无法成为灌溉区间的端点,由于每个位置只能被一个机器,这里可以上差分。朴素的,设 \(f_i\) 表示覆盖 \([0, i]\) 最少需要多少个机器,转移为:\(f_i = \min_{0 \leq j \leq i}(f_j) + 1\),其中 \(i - 2b \leq j \leq i - 2a\),滑动窗口优化这个枚举就可以了。

Rec

接下来可能会口头 AC 高速过题。

Luogu P1944

简单 DP,对于每个右括号统计答案,令 \(f_i\) 表示以 \(i\) 结尾的最长合法序列长度,有转移:\(f_i = f_{i - 1} + 2 + f_{i - 2 - f_{i - 1}}\)

Luogu P3842

\(f_{i, 0/1}\) 表示走完了第 \(i\) 行之后停在了左端点/右端点的最小步数,左端点必定是从上一行的右端点,右端点一定是从上一行的左端点转移来的,判断一下边界,复杂度是 \(O(n)\) 的。

Luogu P4310

考虑暴力转移,记 \(f_i\) 表示统计 \(n\) 个数,第 \(i\) 位上为 \(1\) 的最大子序列长度,对于每个数暴力枚举 \(30\) 个数位开始转移过来,然后再更新。

Luogu P4059

题解好厉害,这个化简好牛逼,其实好像是我唐了。令 \(f_{i, j, k}\) 表示匹配了前 \(i\) 个字符,B 串匹配了前 \(j\) 个字符,\(k\) 表示空格为 0/在 \(A\)/ 在 \(B\),因为显然平白无故两个穿插UN通过你是添加一个空格是无意义且不优的。分类讨论,如果 \(k = 0\),则从 \(f_{i - 1, j - 1}\) 中开始转移。如果在其中一个位置,还要考虑上一个空格的位置,转换一下规则就是每段空格的第一个代价为 \(-a\),后面的为 \(-b\),得到 \(f_{i, j, 1}\) 的转移:\(f_{i, j, 1} = \max(f_{i, j - 1, 1} - b, f_{i, j - 1, 0} - a, f_{i, j - 1, 2} - a)\)。同理可得 \(f_{i, j, 2}\),反过来写。答案在 \(f_{n, m}\) 三个选项中扫一下 \(\max\) 即可。

AtCoder ABC180 E

暴力的状压,记状态 \(f_{i, j}\) 表示当前状态为 \(i\),最后在 \(j\) 的最小代价,转移有:

\[f_{i, j} = \min_{k \in i} f_{i - 2^j, k} + d(k, j) \]

其中 \(d(x, y)\) 即为题目所约束的距离。我们暴力枚举两次点,显然是有一个 \(O(2^n \times n^2)\) 的做法的,能过。

Rec

2025.9.29

明天就放假了!中午太累了,随便切了两个 ZJCPC 的题水一下。

Luogu P1896

状压板子题。记 \(f_{i, j, k}\) 表示前 \(i\) 行,第 \(i\) 行的状态为 \(j\),棋盘上放置了 \(k\) 个国王的合法方案数,有转移:

\[f_{i, j, k} = \sum f_{i - 1, j', k - c(j)} \]

其中 \(j'\) 为满足题意不冲突的新状态,\(c(j)\) 表示状态 \(j\) 中放置的国王个数。

Luogu P1879

简单状压题,设 \(f_{i, j}\) 表示第 \(i\) 行的方案是 \(j\),对于合法的当前方案 \(j\) 和上一行方案 \(k\),除了特殊的 \(f_{1, j} = 1\) 之外,我们都有:

\[f_{i, j} = f_{i, j} + f_{i - 1, k} \]

判断一下合法就位移一下然后看左右。

好,skip 了一堆题,现在来重新写题。

Luogu P2513

逆序对只和每个数的相对大小有关,令 \(f_{i, j}\) 表示 \(i\) 个不同数的所有排列中,逆序对数量为 \(j\) 的排列个数。边界为 \(f_{1, 0} = 1\),有转移:

\[f_{i, j} = \sum_{k = j - i + 1}^{j} f_{j - 1, k} \]

前缀和优化转移。

Rec

Luogu P2511

第一问是裸的二分,对于第二问,我们令 \(f_{i, j}\) 表示前 \(j\) 个木棍分成 \(i\) 组的方案,记 \(s_i\) 为前缀和,有边界为 \(\forall i \in [1, n], f_{1, i} = [s_i \leq x]\),转移:\(f_{i, j} = \sum_{l = k}^{j - 1} f_{i - 1, l}\)\(k\) 需为最小的满足 \(s_j - s_k \leq x\)\(k\),有答案 \(\sum_{i = 1}^{m + 1} f_{i, n}\)。注意到 \(s\) 是有单调性的,我们不用每次从 \(0\) 开始查 \(k\),前缀和维护这个 \(f\)\(g_{i, j} = \sum_{k = 0}^{j} f_{i, k}\),改写转移:\(f_{i, j} = g_{i - 1, j} - g_{i - 1, j - 1}\),预处理出 \(s_j - s_k \leq x\) 的第一个 \(k\),滚掉 \(g, f\) 的第一维可过。

Rec

2025.9.30

Codeforces 1657E

很牛逼的题,思路到正解走的弯不是一般的多。你画一画,题意等同于对于每条 \(u(\neq 1) \to v(\neq 1)\) 的边,其边权都需要大于 \(1 \to u, 1 \to v\) 的边权的边权。令 \(f_{i, j}\) 表示给顶点 \(1\)\(j\) 条边分配了权值且最大权值为 \(i\),有转移:

\[f_{i, k} = \sum_{j \lt k} f_{i, j} \times \binom{n - j - 1}{k - j} \times (K + 1 - j)^{j \times (k - j) + \frac{(k - j) \times (k - j - 1)}{2}} \]

\(n - j - 1\) 条边中选取 \(k - j\) 条边,修改其权值为 \(i\),对于 \(f_{i - 1, j}\) 中的 \(j\) 个点连边向 \(1\) 连接用于转移的 \(k - j\) 条边和后者每每两点之间的权值显然要 \(\geq i\),取值 \(K\),此处的 \(K\) 为题目所给的常数 \(k\)

Rec

Codeforces 1485F

我觉得是挺脑洞一个题,对于当前位 \(i\),要使其所填的数之和为 \(s\),可以填:\(b_i\) / \(b_i - s\),记 \(f_w\) 表示当前填的数之和为 \(w\) 的方案数,有:

  1. \(f_{w + b_i} = f_{w}\)
  2. \(f_{b_i} = \sum_{j = -R}^{R} f_j\)

但是当 \(b_i = b_i - s\) 时有重复要扣掉。这里上一个 std::map 和一个全局的偏移值 \(mov\) (应对操作一)处理。

Rec

Luogu P3423

记物品数量为 \(n\),背包体积为 \(k\),物品体积 \(b_i\),物品数量 \(c_i\) 就有 DP:\(f_{i, j} = \min(f_{i, j}, f_{i - 1, j - b_i \times k})\),这里的 \(k \leq \min(c_i, \lfloor \frac{m}{b_i} \rfloor)\),单调队列优化枚举过程。

Rec

2025.10.1

Luogu P2254

单调队列,令 \(f_{k, i, j}\) 表示在 \(k\) 时间段中,到 \((i, j)\) 的最长路径长,有一个 \(O(k \times n^2 \times m)\) 的一个转移: \(f_{k, i, j} = \max \{ f_{k - 1, i', j'} + dis \}\),一个合法的位置必定与当前位置相同行或者列,令当前时间为 \(l\) 有:

\[\begin{aligned} &f_{k, i, j} = \max_{i - l \leq t \leq i} \{ f_{k - 1, t, j} + i - t \} \\ &f_{k, i, j} = \max_{i - l \leq t \leq i} \{ f_{k - 1, t, j} - p \} + i \end{aligned} \]

对于这个 \(\max\) 的优化上一个单调队列就做完了。

Rec

Luogu P2627

单调队列优化的板子?令 \(f_{i, 0/1}\) 表示在前 \(i\) 头奶牛中,不选 / 选了第 \(i\) 头奶牛的最大价值,令限制的区间长度为 \(l\),转移如下:

\[\begin{cases} f_{i, 0} &= \max(f_{i - 1, 0}, f_{i - 1, 1}) \\ f_{i, 1} &= \max \{f_{j, 0} + \sum_{k = i - l + 1}^{i} e_k, &(i - l \leq j \lt i) \} \end{cases} \]

把后面这个 \(f_{i, 1}\) 改写一下,上个前缀和:

\[\begin{aligned} &f_{i, 1} = \max \{ f_{j, 0} + (s_i - s_j), (i - l \leq j \lt i) \} \\ &f_{i, 1} = \max \{ f_{j, 0} - s_j \} + s_i, (i - l \leq j \lt i) \end{aligned} \]

对这坨 \(j\) 的式子上单调队列即可。

2025.10.2

上午打羽球去了,回来随便打了那个 SCCPC 2021。

Luogu P6563

写出裸的区间 DP 方程,令 \(f_{l, r}\) 表示已知代价 \(l \leq x \leq r\) 之后还需要 \(f_{l, r}\) 的费用才能猜出 \(x\),有:\(f_{l, l} = 0, f_{l, l + 1} = a_l\),且转移为

\[f_{l, r} = \min_{k = l + 1}^{r} \{ \max(f_{l, k}, f_{k + 1, r} \} + a_k \} \]

考虑去拆掉这个 \(\min\) 里套着的 \(\max\),你发现这个 \(f\)\(k\) 的关系可以讨论出来:

  • \(\max = f_{l, k}\),当 \(k\) 减小 \(f_{l, k}\) 也减小。枚举区间的过程中,先枚举 \(r\),再倒序枚举 \(l\),则 \(k\) 是单调递减的
  • \(\max = f_{k + 1, r}\),此时的 \(k\) 必定在上次求出的 \(k'\) 的左边,同样的:\(f_{l, r} = \min_{k = l + 1}^{r} f_{k + 1, r} + a_k\)

此时,对于一个 \(r\) 而言 \(k\) 是单调的,可以上单调队列了。

Rec

下午打了那个 MX-X22,质量还可以,就是不造那个构造哪里锅了。

Luogu P2569

\(f_{i, j}\) 表示前 \(i\) 天之后,剩下 \(j\) 只股票的最大收益,当 \(j\) 一定时,\(i\) 增大时收益 \(f_{i, j}\) 也增大,对于卖出和买入的转移有:

\[\begin{cases} & f_{i, j} = \max(f_{i - w - 1, k} + (k - j) \times bp_i), j \leq k \leq j + bs_i & \text{sold} \\ & f_{i, j} = \max(f_{i - w - 1, k} + (j - k) \times ap_i), j - as_i \leq k \leq j & \text{buy} \\ \end{cases} \]

展开这个转移方程里的括号:

\[f_{i - w - 1, k} + (k - j) \times bp_i = (f_{i - w - 1, k} + k \times bp_i) - j \times bp_i \]

对于固定区间 \([i, j]\)\(\max\) 的取值只和 \(k\) 的取值有关,枚举 \(j\)\(k\) 的取值区间是在平移的。

单调队列优化这个东西即可。

Rec

Luogu P3422

单调队列优化 DP。首先断链成环,先来考虑顺时针(逆时针同理):\(i \to i + 1 \to i + 2 \to \dots \to i + n - 1 \to i + n\) 能不能走到,此时 \(p_i \geq d_i, p_i + p_{i + 1} \geq d_i + d_{i + 1} \dots\),这个可以前缀和优化出 \(p_k - p_{i - 1} \geq d_k - d_{i - 1}, k \in [i, i + n - 1]\),即 \(p_{i - 1} - d_{i - 1} \geq \min_{i \leq k \lt i + n} p_{i - 1} - d_{i - 1}\),滑动窗口解。逆时针则有 \(d_{i - 1} - p_i \leq \min_{i - n \leq k \lt i} d_{k - 1} - p_k\)

Rec

2025.10.3

Luogu P4588

简单地用线段树维护一个积即可。题目中重要的一个性质是 \(2\) 操作至多每个数 \(1\) 次,对于询问序列建立线段树,\(op = 1\) 就把值写成 \(x\),反之写成 \(1\),单点修改 \(1\),区间查询 \([1, i]\),做完了。

Rec

Luogu P1471

大大的一个数学题,来推一推:

\[\begin{aligned} S^2 &= \frac{1}{n} \times \left( (x_1 - \bar{x})^2 + (x_2 - \bar{x})^2 + \dots + (x_n - \bar{x})^2 \right) \\ S^2 &= \frac{1}{n} \times \left( (x_1^2 - 2 x_1 \bar{x} + \bar{x}^2 + \dots + x_n^2 - 2 x_n \bar{x} + \bar{x}^2) \right) \\ S^2 &= \frac{1}{n} \times \left( (x_1^2 + x_2^2 + \dots + x_n^2) - 2 \bar{x} (x_1 + x_2 + \dots + x_n) + n \bar{x}^2 \right) \\ S^2 &= \frac{1}{n} \times \left( (x_1^2 + x_2^2 + \dots + x_n^2) - n \bar{x}^2 \right) \\ S^2 &= \frac{(x_1^2 + x_2^2 + \dots + x_n^2)}{n} - \bar{x}^2 \end{aligned} \]

2025.10.4

Luogu P4316

不会期望,恶补期望。

期望是线性的,总路径长度的期望可以直接拆出来,拆成每条边长度的期望之和,令 \(f_{u}\) 表示从 \(u\) 到终点的路径长度期望,有:\(f_{u} = \frac{\sum_{v \in u} f_v + w(u, v)}{k}\)。Topo 碾过去就可以了。

Rec

2025.10.5

Luogu P4550

\(f(i)\) 表示取了 \(i\) 张邮票,要取完剩下邮票的期望次数,有 \(f(n) = 0\),转移:

\[f(n) = \frac{i}{n} \times f(i) + \frac{n - i}{n} \times f(i + 1) + 1 \]

前面是取到已经有的邮票的期望,后面则相反,再加上抽取这次邮票的期望。

\(f(i) = f(i + 1) + \frac{n}{n - i}\)

再记 \(g(i)\) 表示取了 \(i\) 张邮票,要取完剩余的邮票的期望代价。有 \(g(n) = 0\),转移:

\[\begin{aligned} g(i) &= \frac{i}{n} \times (g(i) + f(i) + 1) + \frac{n - i}{n} \times (g(i + 1) + f(i + 1) + 1) \\ g(i) &= \frac{i}{n - i} \times f(i) + g(i + 1) + f(i + 1) + \frac{n}{n - i} \end{aligned} \]

Rec

Luogu P1654

对于新加进来的一个 \(1\),来拆一下这个贡献:

\[\begin{aligned} &(x + 1)^3 \\ = &(x + 1) \times (x + 1) \times (x + 1) \\ = &(x^2 + 2x + 1) \times (x + 1) \\ = &x^3 + 2x^2 + x + x^2 + 2x + 1 \\ = &x^3 + 3x^2 + 3x + 1 \end{aligned} \]

增量为后面那个 \(3x^2 +3x + 1\),来对于这个值维护期望,我们分别拆开来看 \(x, x^2\) 的期望然后合并起来,有:

\[\begin{cases} x1(i) = (x1(i - 1) + 1) \times p(i) \\ x2(i) = (x2(i - 1) + 2 \times x1(i - 1) + 1) \times p(i) \end{cases} \]

得到答案 \(ans_i = ans_{i - 1} + (3 \times x2(i - 1) + 3 \times x1(i - 1) + 1) \times p_i\),对于问题输出 \(ans_n\) 即可。

Rec

Luogu P1297

依旧期望,分类讨论一下即可。

  • \(a_i = a_{i + 1}\),两道题的答案都是随机的,期望为 \(\frac{1}{a_i} = \frac{1}{a_{i + 1}}\)
  • \(a_i \gt a_{i + 1}\),有 \(\frac{a_{i + 1}}{a_i}\) 的概率答案落在 \([1, a_{i + 1}]\),期望为 \(\frac{a_{i + 1}}{a_i} \times \frac{1}{a_{i + 1}} = \frac{1}{a_i}\)
  • \(a_i \gt a_{i + 1}\),随机答案只落在 \([1, a_i]\) 中,而第 \(i + 1\) 题正确答案落在 \([1, a_i]\) 的概率为 \(\frac{a_i}{a_{i + 1}}\) 的概率,期望为 \(\frac{a_i}{a_{i + 1}} \times \frac{1}{a_i} = \frac{1}{a_{i + 1}}\)

答案为:

\[\sum_{i = 1}^{n} \frac{1}{\max(a_i, a_{i + 1})} \]

Rec

posted @ 2025-09-28 06:36  起汐  阅读(4)  评论(0)    收藏  举报