摘要:
单峰函数求极值。 取两个三等分点,如果是求极大值,那么较小的那端调整。 如果求极小值,那么较大的那端调整。 类似于爬坡过程,让离极值更远的一端爬到三等分点。 例题:P3382 三分 参考代码 #include <cstdio> const int N = 15; const double EPS = 阅读全文
摘要:
定义 1:删去该点后最大子树最小的点 定义 2:删去该点后所有子树大小均不超过 n/2 的点 两个定义是等价的。如果一个点有超过 n/2 的子树,那么往这个方向走一步,其最大子树会变小。 性质: 一棵树最多有 2 个重心且相邻 重心到所有点距离和最小 可以用调整法证明(相当于换根),P2986 [U 阅读全文
摘要:
树形 DP 中的换根 DP 问题又被称为二次扫描,通常需要求以每个点为根时某个式子的答案。 这一类问题通常需要遍历两次树,第一次遍历先求出以某个点(如 )为根时的答案,在第二次遍历时考虑由根为 转化为根为 时答案的变化(换根)。这个变化往往分为两部分, 子 阅读全文
摘要:
树上的背包问题,也就是背包问题与树形 DP 的结合。 树上背包往往是设 表示以 为根的子树放了体积 (又或者是选 个节点)时的最优解。 进行状态转移时,依次进入每一个子节点 ,处理完 的子树后将目前的 \(dp_{u, 阅读全文
摘要:
最长上升子序列问题是一个经典的线性动态规划问题。 例题:B3637 最长上升子序列 分析:设原始数组为 ,定义状态 表示以 结尾的上升子序列的最大长度。注意这个状态定义中有两个重点,第一个重点是 只维护所有原始序列中以 结 阅读全文
摘要:
A 火柴 #include <cstdio> int cnt[10] = {0, 1, 2, 3, 3, 2, 3, 4, 5, 3}; char num[10][10] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; 阅读全文
摘要:
Sparse Table 可用于解决这样的问题:给出一个 个元素的数组 ,支持查询操作计算区间 的最小值(或最大值)。这种问题被称为区间最值查询问题(Range Minimum/Maximum Query,简称 RMQ 阅读全文
摘要:
单调栈是一种内部元素具有单调性的栈,可以解决与“以某个值为最值的最大区间”等问题。 对于一个数组 ,找到每个元素前边/后边第一个比它大/小的元素。假如数组中某个元素后边第一个比它大的是 ,前边第一个比它大的是 ,则 这个区间内的最大 阅读全文
摘要:
一个整数可以被表示成若干质数的乘积。例如: 。 算术基本定理:设 ,那么必有 \(a = p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_s^{\alph 阅读全文