摘要:
二维积性函数——zky 数论选讲学习笔记 线性筛 埃氏筛:从小到大扫,遇到一个质数就将其所有倍数标记为合数。可以证明时间复杂度是 \(O(n \log \log n)\) 的。 对于一个合数,考虑在其最小质因子 \(p\) 处筛掉他。设这个合数是 \(x × p\),先枚举 \(x\),然后再从小到 阅读全文
摘要:
2023.10.28 [NOIP2018 提高组] 铺设道路 题目传送门 选择一个区间进行“填坑”操作; 所以我们的贪心策略是: 若 a[i] > a[i - 1] , sum += a[i] - a[i - 1]; 假设现在有一个坑,但旁边又有一个坑。 你肯定会选择把两个同时减 1; 那么小的坑肯 阅读全文
摘要:
KMP 核心思想:在每次失配时,不是把 p 串往后移一位,而是把 p 串往后移动至下一次可以和前面部分匹配的位置,这样就可以跳过大多数的失配步骤。而每次 p 串移动的步数就是通过查找 next 数组确定的。 KMP主要分两步:求 next 数组、匹配字符串,其难点在于如何求 next 数组 for( 阅读全文
摘要:
根号分治 PS:本篇博客题目分析及内容(除代码)均来自于paulzrm 根号分治,是暴力美学的集大成体现。与其说是一种算法,我们不如称它为一个常用的trick。 首先,我们引入一道入门题目 CF1207F Remainder Problem: 给你一个长度为 $5\times10^5$ 的序列,初值 阅读全文
摘要:
斜率优化 dp 适用条件 在单调队列优化 dp 中常见转移方程中,如果 \(cost(i,j)\) 多项式包含 \(i, j\) 乘积项,则可以化成一次函数维护斜率解决。 以P5785 [SDOI2012] 任务安排为模板,主要记录如何斜率优化 转移方程为(不多赘述) \[f_i = \min_{0 阅读全文
摘要:
单调队列优化 dp 适用条件 只关注“状态变量”“决策变量”及其所在的维度,如果转移方程形如: \[f[i]=\min_{L(i)≤j≤R(i)}^{}{\{f[j]+cost(i,j)\}} \]则可以使用单调队列优化。具体的,把 \(cost(i,j)\) 分成两部分,第一部分仅与 \(i\) 阅读全文
摘要:
2024.5.18 杂题 「SMOI-R1」Apple 两个操作,修改元素,求子集和。 高位前缀和不会。考虑朴素 dp 转移 设 \(f[i]\) 表示二进制下长度为 \(n\) 的数前 \(i\) 位为 \(1\),后边为 \(0\) 的子集和。理论来说可以转移,但是比较麻烦,考虑优化状态,\(f 阅读全文
摘要:
区间 dp 石子合并 将区间长度 \(len\) 作为 \(dp\) 的阶段 设 \(f[l][r]\) 表示把最初的第 \(l\) 堆到第 \(r\) 堆石子合并成一堆,需要消耗的最少体力。 合并代价就是这两堆石子的质量和,这里可以用前缀和直接计算,设 \(s[i]\) 表示前 \(i\) 堆石子 阅读全文
摘要:
背包 dp AcWing 278. 数字组合 \(n\) 个数就是 $n $ 个物品,每个物品的价值就是它本身的数值,只能用一次,要求价值和为 \(m\) 的方案数。直接 01 背包即可。 int n, m; int a[N], f[M]; signed main() { cin >> n >> m 阅读全文
摘要:
线性 dp SP15637 GNYR04H 按照编号从小到大摆放所有人 每个人都只能放在已经存在的某个人的后面 (除第一行外)任何一行的人数都不能比后一行多 状态表示:\(f[a][b][c][d][e]\) 表示第一行 \(a\) 个人,第二行 \(b\) 个人,...,第五行 \(e\) 个人的 阅读全文