https://www.luogu.com.cn/training/641872 和 「CodeChef」Mex Subsequence。
看似 DP 特训,实则 DS 特训。
优先考察性质,否则后果参考 S-T3。
技巧一
以 「CEOI2016」kangaroo 为例。
价值两个脆香米的好题。
考虑将 \(1 \sim n\) 这 \(n\) 个数按顺序从小到大插入,这样已在序列中的都比当前数小,将要插入序列中的都比当前数大。
发现转移时就只与当前的连续段个数相关。
而为了保证方案合法,还需要使得每个连续段都是形如 M 形,才能保证之后加入的可以新开连续段或合并两段。
可以线性。
技巧二
以 「POI2013」LUK-Triumphal arch 为例。
神秘博弈论。
这种选点的好像都要二分。
技巧三
以 「CEOI2017」Chase 为例。
提到树上路径相关问题的两种思考方式:枚举 LCA 和枚举端点。
还有一个是点分治。
寄巧四
以 「CF1476F」Lanterns 为例。
*3000 题当然有 *3000 的做法。
考察打开 \([1, i]\) 的灯笼后,照亮的区域是 \([1, i]\) 中的某些点和 \([i + 1, n]\) 的一段前缀。而 \([i + 1, n]\) 的灯笼打开后在 \([1, i]\) 中照亮的是一段后缀。
因此设 \(f_{i, j}\) 表示打开 \([1, i]\) 的灯笼后在保证 \([1, j]\) 的区域被照亮的情况下最远可以照到的范围是 \([i + 1, f_{i, j}]\),若不能保证 \([1, j]\) 被照亮则为 \(-\infin\)。
不难发现当 \(i\) 一定时,\(f_{i, j}\) 随 \(j\) 的增大而减小。
转移时,如果第 \(i\) 个灯笼向右,那么转移为:
\(f_{i, j} \gets \max(f_{i - 1, j}, i + p_i)(f_{i - 1, j} > -\infin)\),
\(f_{i, i} \gets \max(f_{i - 1, i - 1}, i + p_i)(f_{i - 1, i - 1} \ge i)\)。
因为只有当可以将 \([1, i - 1]\) 覆盖完时第 \(i\) 个灯笼才可能向左,所以有:
\(f_{i, j} \gets f_{i, i - 1} \gets f_{i - 1, i - p_i - 1}(f_{i - 1, i - p_i - 1} > -\infin)\),
\(f_{i, i} \gets f_{i - 1, i - p_i - 1}(f_{i - 1,i - p_i - 1} \ge i)\)。
具体实现上用线段树维护 \(f\),每次修改的都是一段区间。
虽然这个做法确实是依托,但是确实体现了常规 DP 的一种思路:
-
阶段:将问题划分为若干阶段,阶段间存在一定顺序。
-
状态:当前阶段中会对后续决策产生影响的信息。
-
转移
-
优化:优化状态和数据结构优化转移。两者本质是一样的,
技巧五
以 「CF1152F2」Neko Rules the Catniverse (Large Version) 为例。
插入 DP。依然是插入的同时保证一定的大小关系。
注意到 \(m\) 和 \(k\) 都很小,所以可以设进状态里。
再注意到转移不变且 \(n\) 很大,所以进行一个矩阵的快速幂。
技巧六
以 「BZOJ4665」小 w 的喜糖 为例。
容斥。
抛开题目不谈,先证一遍二项式繁衍。
你知道为什么容斥系数是 -1、1、-1、1 吗?
—— Just_int_mian
首先,有二项式定理 \((a + b)^n = \sum\limits_{i = 0}^n C_n^i a^i b^{n - i}\)。
然后,取 \(a = -1, b = 1\),得 \(\sum\limits_{i = 0}^n (-1)^i C_n^i = [n = 0]\)。
设 \(g_n = \sum\limits_{i = 0}^n (-1)^i C_n^i f_i\)。
则有
所以 \(g_n = \sum\limits_{i = 0}^n (-1)^i C_n^i f_i \iff f_n = \sum\limits_{i = 0}^n (-1)^i C_n^i g_i\)。
设 \(g'_n = (-1) ^ n g_n\),则 \(g_n = (-1) ^ n g'_n\)。
则有
所以 \(f_n = \sum\limits_{i = 0}^n C_n^i g'_i \iff g'_n = \sum\limits_{i = 0}^n (-1)^{n - i} C_n^i f_i\)。
然后还有一种更常用的写法,即 \(f_i = \sum\limits_{j = i}^n C_j^i g_j \iff g_i = \sum\limits_{j = i}^n (-1) ^ {j - i} C_j^i f_j\)。
这样 \(f_i\) 表示钦定(不是至少)选 \(i\) 个的方案数,\(g_i\) 表示恰好选 \(i\) 个的方案数。
总结总结
因为万物起源 DP,所以 DP 并没有什么共同点,没什么好总结的。
因为 DP 只是一种工具,所以更应该注重思维的提升,没什么好总结的。