做题计划

Part 2.1 模拟

Part 2.2 排序算法

Part 2.3 二分答案

Part 2.4 分治

Part 2.5 贪心

Part 2.6 高精度

Part 3 搜索

Part 3.1 深度优先搜索

Part 3.2 广度优先搜索

Part 3.3 记忆化搜索

Part 3.4 搜索的剪枝

Part 3.5 双向搜索

在搜索时,如果能从初态和终态出发,同时进行搜索,就可以减小搜索树的规模,提高时间效率。

Part 3.6 A*

Part 3.7 IDA*

像 BFS 那样,每次只扩展一层节点,却采用 DFS 方式来遍历搜索树,这就是迭代加深搜索。

再加上一个估价函数来减小搜索量,就是 IDA*了。

Part 4 动态规划

动态规划是一种重要的思维方法,通过利用已有的子问题信息高效求出当前问题的最优解。

Part 4.1 线性动态规划

线性动态规划,即具有线性阶段划分的动态规划。

Part 4.2 背包动态规划

背包动态规划是线性动态规划中特殊的一类,NOIP中考到的次数也不少。

Part 4.3 区间动态规划

区间动态规划一般以区间作为动态规划的阶段。

Part 4.4 树形动态规划

树形动态规划,即在树上进行的动态规划。

因为树的递归性质,树形动态规划一般都是递归求解的。

Part 4.5 状态压缩动态规划

将一个状态压缩为一个整数(通常为二进制数),就可以在更为方便地进行状态转移的同时,达到节约空间的目的。

Part 4.6 倍增优化动态规划

利用倍增的方式,我们可以将状态转移的效率大大提高。

Part 4.7 数据结构优化动态规划

利用数据结构来维护已有信息,也可以达到优化状态转移的目的。

Part 4.8 单调队列优化动态规划

如果决策具有单调性,就可以考虑运用单调队列来优化动态规划的效率。

Part 4.9 斜率优化动态规划

通过用单调队列维护一个凸壳,来达到优化转移的目的。

Part 4.10 四边形不等式优化动态规划

利用四边形不等式,我们就可以提高一些区间动态规划的效率。

Part 4.11 数位统计类动态规划

统计一个区间中满足条件的数有多少,就是数位统计类动态规划。

Part 4.12 轮廓线动态规划

轮廓线动态规划(即常说的插头 DP)是一种特殊的状压动态规划,通过以轮廓线为状态来实现状态转移。

Part 5 字符串

字符串问题有很多自己的特点。

Part 5.1 字符串哈希

Part 5.2 KMP

KMP 算法可以用来解决模式串匹配问题。

Part 5.3 Manacher

Manacher 可以在线性时间内求出一个字符串的最长回文子串。

Part 5.4 Trie树

Part 5.5 AC自动机

AC自动机可以看成是 KMP 和 Trie 的结合体,用于解决多字符串匹配问题。

Part 5.6 后缀数组

后缀数组是处理字符串的有力工具。

Part 5.7 后缀自动机

Part 6 数学

OI 中的数学知识很多,也有些杂乱。

Part 6.1 整除相关

与整除相关的概念有很多,比较常用的有素数,最大公约数和欧拉函数。

Part 6.1.1 素数

素数,指的是除 1 和它本身之外没有其他约数的数。

Part 6.1.2 最大公约数

如果两个数有一个共同的约数,那么这个约数就被称为公约数。最大公约数就是指这两个数的所有公约数中,最大的一个。

求解两个数的最大公约数,可以采用欧几里得算法解决。

Part 6.1.3 欧拉函数

欧拉函数 $ \varphi (x) $ 表示了小于 $ x $ 的数字中,与 $ x $ 互质的数字个数。

Part 6.2 同余方程

求解不定方程往往可以引出不少话题。

Part 6.2.1 线性同余方程&乘法逆元

Part 6.2.2 中国剩余定理

中国剩余定理可以快速解一元线性同余方程组。

Part 6.2.3 BSGS

BSGS 算法可以高效计算高次同余方程的解。

Part 6.3 博弈论

博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。

Part 6.4 概率与期望

概率和期望是紧密相连的,OI 中往往会出现和概率期望相关的动态规划问题。

Part 6.5 组合数学

Part 6.5.1 排列组合

Part 6.5.2 卡特兰数&斯特林数

Part 6.5.3 容斥原理

Part 6.6 线性代数

Part 6.6.1 矩阵

利用矩阵优化数列递推,可以实现复杂度从线性到对数级的转变。

Part 6.6.2 高斯消元

高斯消元可以用来求解方程组。

Part 6.6.3 线性基

线性基可以求解最大异或和的一类问题。

Part 6.7 多项式

对多项式的运算进行优化,从而能够解决规模更大的问题。

Part 6.8 莫比乌斯反演

Part 7 数据结构

灵活地运用数据结构可以高效地查询并处理需要的信息。

Part 7.1 链表

在一个数列中高效插入一个元素,链表毫无疑问是最好的选择。

Part 7.2 栈

栈,是一种后进先出(FILO)的数据结构。

Part 7.3 队列

队列,是一种先进先出(FIFO)的数据结构。

Part 7.4 并查集

并查集常用于处理一些不相交集合的合并和查询问题。

Part 7.5 堆

堆总是一棵完全树,堆中某个节点的值总是不大于或不小于其父节点的值。

Part 7.6 树状数组

树状数组是一种简洁高效的树形数据结构。

Part 7.7 线段树

线段树的通用性比树状数组更强,可以处理更多涉及区间操作的题目。

Part 7.8 分块

分块是一种非常通用的暴力方法,虽然效率不如线段树和树状数组,但可以解决很多线段树和树状数组处理不了的问题。

Part 7.9 点分治

点分治是一种可以高效统计树上路径信息的算法。

Part 7.10 主席树

Part 7.11 平衡树

Part 7.12 树链剖分

树链剖分可以将任意一条树上路径划分成若干条连续的链,并用线段树等数据结构高效维护链上信息。

Part 7.13 树套树

树套树可以用来维护多维度信息。

Part 7.14 动态树

Link-Cut Tree 可以用来解决动态树一类问题。

Part 7.15 CDQ分治&整体二分

通过离线分治算法,我们可以避免使用一些高级数据结构。

Part 7.16 可持久化数据结构

可持久化数据结构实现了在更新信息的时候保留历史版本。

Part 8 图论

图论是数学的一个分支,它以图为研究的对象。

Part 8.1 图的存储与遍历

这里的图论内容都比较简单,涉及图的存储以及遍历图的方式。

Part 8.2 最短路问题

很多题目都可以转化为最短路的模型。因此,掌握最短路算法非常重要。

Part 8.3 树上问题

作为一种特殊的图,树上的问题具有很多鲜明的特点。

Part 8.3.1 二叉树

二叉树是一种特殊的树,它有很多特殊的性质。

Part 8.3.2 树的直径

树的直径被定义为树上最远的两点间的距离。

计算树的直径,可以通过两遍 DFS 解决。

Part 8.3.3 最近公共祖先

两个点的最近公共祖先,即两个点的所有公共祖先中,离根节点最远的一个节点。

求解最近公共祖先,常用的方法是树上倍增或者树链剖分。

Part 8.4 生成树

用 $ n-1 $ 条边将图上的 $ n $ 个点连接起来,形成的树就被称为生成树。

Part 8.5 拓扑排序

将一个有向无环图排序,使得所有排在前面的节点不能依赖于排在后面的节点,这就是拓扑排序。

Part 8.6 差分约束

差分约束要解决的问题是:求出一组 $ n $ 元不等式的一组解,使得所有约束关系都能得到满足。

Part 8.7 图的连通性相关

利用 Tarjan 算法,我们可以解决很多与图的连通性相关的问题。

Part 8.8 二分图

二分图上的不少问题都可以转化成网络流解决,当然也有独特的其他方法。

Part 8.9 网络流

网络流是图论中一个重要的分支,很多题目都可以通过建立网络流的模型来解决。

Part 8.9.1 最大流/最小割

最大流,即求网络中最大的流量。

最小割,即求一个边权最小的边集,使得源点和汇点不再连通。

可以证明,最大流=最小割,因此我们将最大流和最小割专题放在一起。

Part 8.9.2 费用流

在网络流中给边加上一个参数——费用,就出现了费用流。

Part 8.10 2-SAT

Part 8.11 虚树

Part 8.12 矩阵树定理

矩阵树定理可以解决图的生成树计数问题。

Part 9 计算几何

试着用计算机来解决几何问题吧!

Part 9.1 凸包

Part 9.2 旋转卡壳

Part 9.3 半平面交

Part 10 杂项

Part 10.1 模拟退火

模拟退火是一种随机化算法。当一个问题的方案数量极大(甚至是无穷的)而且不是一个单峰函数时,我们常使用模拟退火求解。

Part 10.2 0/1 分数规划

Part 10.3 奇怪的题目

OI 界中有一些非常规套路的题目,这里放出来分享。

Part 10.4 非传统题

在 NOI 等比赛中,非传统题正越来越频繁出现。

非传统题主要包括以下几类:提交答案题,交互题,通信题。

因为洛谷目前只支持提交答案题,因此这里暂时只列出提交答案题。

Part 10.4.1 提交答案题

给你一些输入,你只需要提交这些输入对应的答案,即为提交答案题。

文章作者: Langlangago
文章链接: https://langlangago.xyz/2019/06/24/做题计划/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Langlangago's blog

评论
目录
  1. 1. Part 2.1 模拟
  2. 2. Part 2.2 排序算法
  3. 3. Part 2.3 二分答案
  4. 4. Part 2.4 分治
  5. 5. Part 2.5 贪心
  6. 6. Part 2.6 高精度
  • Part 3 搜索
    1. 1. Part 3.1 深度优先搜索
    2. 2. Part 3.2 广度优先搜索
    3. 3. Part 3.3 记忆化搜索
    4. 4. Part 3.4 搜索的剪枝
    5. 5. Part 3.5 双向搜索
    6. 6. Part 3.6 A*
    7. 7. Part 3.7 IDA*
  • Part 4 动态规划
    1. 1. Part 4.1 线性动态规划
    2. 2. Part 4.2 背包动态规划
    3. 3. Part 4.3 区间动态规划
    4. 4. Part 4.4 树形动态规划
    5. 5. Part 4.5 状态压缩动态规划
    6. 6. Part 4.6 倍增优化动态规划
    7. 7. Part 4.7 数据结构优化动态规划
    8. 8. Part 4.8 单调队列优化动态规划
    9. 9. Part 4.9 斜率优化动态规划
    10. 10. Part 4.10 四边形不等式优化动态规划
    11. 11. Part 4.11 数位统计类动态规划
    12. 12. Part 4.12 轮廓线动态规划
  • Part 5 字符串
    1. 1. Part 5.1 字符串哈希
    2. 2. Part 5.2 KMP
    3. 3. Part 5.3 Manacher
    4. 4. Part 5.4 Trie树
    5. 5. Part 5.5 AC自动机
    6. 6. Part 5.6 后缀数组
    7. 7. Part 5.7 后缀自动机
  • Part 6 数学
    1. 1. Part 6.1 整除相关
      1. 1.1. Part 6.1.1 素数
      2. 1.2. Part 6.1.2 最大公约数
      3. 1.3. Part 6.1.3 欧拉函数
    2. 2. Part 6.2 同余方程
      1. 2.1. Part 6.2.1 线性同余方程&乘法逆元
      2. 2.2. Part 6.2.2 中国剩余定理
      3. 2.3. Part 6.2.3 BSGS
    3. 3. Part 6.3 博弈论
    4. 4. Part 6.4 概率与期望
    5. 5. Part 6.5 组合数学
      1. 5.1. Part 6.5.1 排列组合
      2. 5.2. Part 6.5.2 卡特兰数&斯特林数
      3. 5.3. Part 6.5.3 容斥原理
    6. 6. Part 6.6 线性代数
      1. 6.1. Part 6.6.1 矩阵
      2. 6.2. Part 6.6.2 高斯消元
      3. 6.3. Part 6.6.3 线性基
    7. 7. Part 6.7 多项式
    8. 8. Part 6.8 莫比乌斯反演
  • Part 7 数据结构
    1. 1. Part 7.1 链表
    2. 2. Part 7.2 栈
    3. 3. Part 7.3 队列
    4. 4. Part 7.4 并查集
    5. 5. Part 7.5 堆
    6. 6. Part 7.6 树状数组
    7. 7. Part 7.7 线段树
    8. 8. Part 7.8 分块
    9. 9. Part 7.9 点分治
    10. 10. Part 7.10 主席树
    11. 11. Part 7.11 平衡树
    12. 12. Part 7.12 树链剖分
    13. 13. Part 7.13 树套树
    14. 14. Part 7.14 动态树
    15. 15. Part 7.15 CDQ分治&整体二分
    16. 16. Part 7.16 可持久化数据结构
  • Part 8 图论
    1. 1. Part 8.1 图的存储与遍历
    2. 2. Part 8.2 最短路问题
    3. 3. Part 8.3 树上问题
      1. 3.1. Part 8.3.1 二叉树
      2. 3.2. Part 8.3.2 树的直径
      3. 3.3. Part 8.3.3 最近公共祖先
    4. 4. Part 8.4 生成树
    5. 5. Part 8.5 拓扑排序
    6. 6. Part 8.6 差分约束
    7. 7. Part 8.7 图的连通性相关
    8. 8. Part 8.8 二分图
    9. 9. Part 8.9 网络流
      1. 9.1. Part 8.9.1 最大流/最小割
      2. 9.2. Part 8.9.2 费用流
    10. 10. Part 8.10 2-SAT
    11. 11. Part 8.11 虚树
    12. 12. Part 8.12 矩阵树定理
  • Part 9 计算几何
    1. 1. Part 9.1 凸包
    2. 2. Part 9.2 旋转卡壳
    3. 3. Part 9.3 半平面交
  • Part 10 杂项
    1. 1. Part 10.1 模拟退火
    2. 2. Part 10.2 0/1 分数规划
    3. 3. Part 10.3 奇怪的题目
    4. 4. Part 10.4 非传统题
      1. 4.1. Part 10.4.1 提交答案题