【刷题】算法基础刷题清单

目录

  • 一、基础算法
    • 1、排序
    • 2、二分查找
    • 3、高精度
    • 4、前缀和与差分
    • 5、双指针算法
    • 6、位运算
    • 7、离散化
    • 8、区间合并
    • 9、RMQ
  • 二、动态规划
    • 1、线性DP
    • 2、背包问题
    • 3、状态机模型
    • 4、状态压缩DP
    • 5、区间DP
    • 6、树形DP
    • 7、数位DP
    • 8、单调队列优化
    • 9、斜率优化
  • 三、搜索
    • 1、BFS
      • ①、Flood Fill
      • ②、最短路模型
      • ③、多源BFS
      • ④、最小步数模型
      • ⑤、双端队列广搜
      • ⑥、双向广搜
      • ⑦、A*
    • 2、DFS
      • ①、连通性模型
      • ②、搜索顺序
      • ③、剪枝与优化
      • ④、迭代加深
      • ⑤、双向DFS
      • ⑥、IDA*
  • 四、数据结构
    • 0、STL
    • 1、链表与邻接表
    • 2、栈与队列
    • 3、kmp
    • 4、Trie
    • 5、堆
    • 6、Hash表
    • 7、并查集
    • 8、树状数组
    • 9、线段树
    • 10、可持久化数据结构
    • 11、平衡树——Treap
    • 12、AC自动机
  • 五、图论
    • 1、树和图遍历
    • 2、最短路
    • 3、最小生成树
    • 4、差分约束
    • 5、最近公共祖先
    • 6、有向图的强连通分量
    • 7、无向图的双连通分量
    • 8、二分图
    • 9、欧拉回路和欧拉路径
    • 10、拓扑排序
  • 六、贪心
    • 1、区间问题
    • 2、Huffman树
    • 3、排序不等式
    • 4、绝对值不等式
    • 5、推公式
  • 七、数学知识
    • 1、质数
    • 2、约数
    • 3、欧拉函数
    • 4、快速幂
    • 5、扩展欧几里得算法
    • 6、中国剩余定理
    • 7、高斯消元
    • 8、组合计数
    • 9、容斥原理
    • 10、概率与数学期望
    • 11、博弈论
    • 12、其他
  • 八、其他

一、基础算法

1、排序

快速排序:
快速排序【模板】
第k个数【快速选择】

归并排序:
归并排序【模板】
逆序对

基数排序:
基数排序【模板】

2、二分查找

二分查找【模板】
数的范围
数的三次方根

3、高精度

高精度加法【模板】
高精度减法【模板】
高精度乘法【模板】

4、前缀和与差分

前缀和【模板】
矩阵前缀和【模板】
差分【模板】
矩阵差分【模板】

5、双指针算法

最长连续不重复子序列

6、位运算

位运算【模板】
二进制中1的个数
64位整数乘法

7、离散化

离散化【模板】
区间和

8、区间合并

区间和并【模板】

9、RMQ

二、动态规划

1、线性DP

数字三角形:
摘花生
最低通行费
方格取数
方格取数(20CSPJ普及组)【可上下走】
传纸条(NOIP2008 提高组)

最长上升子序列【LIS】:
怪盗基德的滑翔翼
登山,合唱队形
友好城市【不相交匹配转化】
最大上升子序列和
拦截导弹【dilworth定理】

最长公共子序列【LCS】:
最长公共子序列【相同元素可转最长上升】

最长公共上升子序列【LCIS】:
最长公共上升子序列【O(n^2)做法】

其他:
小球染色【组合数求和】

2、背包问题

背包九讲模板

01背包问题:
采药【模板】
装箱问题
数字组合【体积条件:恰好为V,求方案数】
能量石(Google Kickstart2019 Round B Problem B)【贪心,01背包,价值随体积增大而减小】

完全背包问题:
买书【体积条件:恰好是V,求方案数】
货币系统【体积条件:恰好是V,求方案数】
货币系统(NOIP2018 提高组)【体积条件:恰好是V,求是否存在方案】

多重背包问题:
庆功会【模板】

二维费用问题:
宠物小精灵【模板】
潜水员【体积条件:不少于V,求最小价值】

分组背包问题:
金明的预算方案(附件数<=2)
机器分配【分组背包,求具体方案】

有依赖背包问题:
二叉苹果树【体积为1的弱化版】

3、状态机模型

大盗阿福
买卖股票的时机 IV(LeetCode 188 Hard)
买卖股票时机含冷冻期(LeetCode 309)
设计密码【不包含某个子串的方案数,KMP】

4、状态压缩DP

棋盘类状压:
蒙德里安的梦想
国王 (ZJOI 2008)
玉米田
炮兵阵地(NOI2001)【由前两行递推】

集合类状压:
最短Hamilton路径
毕业旅行问题 (字节跳动2019春招研发)
愤怒的小鸟(NOIP2016 提高组)【重复覆盖问题】

5、区间DP

石子合并【模板题】
凸多边形的划分【高精度】

环形区间DP:
石子合并(NOI1995)
能量项链(NOIP2006 提高组)

记录方案:
加分二叉树(NOIP2003 提高组)

二维区间DP:
棋盘分割(NOI1999)

6、树形DP

Balancing Act【树的重心】
Cow Marathon【树的直径】
【树的中心】
数字转换【约数建边+树的直径】

二叉苹果树【有依赖背包问题】

没有上司的舞会【每条边至多选1点】
战略游戏【每条边至少选1点】
皇宫看守【每个点自身被选或其相邻的点被选】

7、数位DP

数字游戏【区间内的不降数】
Amount of Degrees【区间内B进制有且只有K个1】
Windy 数【相邻数字只差>=2、不含前导0】
数字游戏 2【各位数字之和模N为0】
不要 62【不包含4和62】

8、单调队列优化

9、斜率优化

三、搜索

1、BFS

①、Flood Fill

池塘计数【Flood Fill模板】
城堡问题(The Castle)【Flood Fill、并查集】
山峰和山谷

②、最短路模型

迷宫问题【最短路模型模板】
武士风度的牛

③、多源BFS

④、最小步数模型

⑤、双端队列广搜

⑥、双向广搜

⑦、A*

2、DFS

①、连通性模型

②、搜索顺序

③、剪枝与优化

④、迭代加深

⑤、双向DFS

⑥、IDA*

四、数据结构

0、STL

STL【模板】

1、链表与邻接表

链表【模板】

2、栈与队列

单调栈【模板】
单调队列【模板】:滑动窗口

3、kmp

KMP【模板】

4、Trie

Trie树【模板】

5、堆

堆【模板】

6、Hash表

7、并查集

并查集【模板】
格子游戏【判断环】
连通块中点的数量【记录集合元素个数】

8、树状数组

9、线段树

10、可持久化数据结构

11、平衡树——Treap

12、AC自动机

五、图论

1、树和图遍历

树的深度优先遍历:
Balancing Act【树的重心】
树的宽度优先遍历:
Cow Marathon【树的直径】

2、最短路

Dijkstra【证明+模板】
Bellman-Ford、SPFA【证明+模板】
Floyd【证明+模板】

3、最小生成树

4、差分约束

5、最近公共祖先

6、有向图的强连通分量

7、无向图的双连通分量

8、二分图

9、欧拉回路和欧拉路径

10、拓扑排序

六、贪心

1、区间问题

区间选点
最大不相交区间
区间分组
区间覆盖

2、Huffman树

合并果子【O(nlogn) / O(n)】

3、排序不等式

4、绝对值不等式

5、推公式

奶牛玩杂技

七、数学知识

1、质数

试除法判断质数【 O ( n ) O(\sqrt{n}) O(n )
试除法分解质因数【 O ( n ) O(\sqrt{n}) O(n )
筛质数【基本 / 埃氏 / 线性筛法】

2、约数

试除法求约数【 O ( n ) O(\sqrt{n}) O(n )
求约数个数【是质数的约数个数+1相乘】
求约数之和
最大公约数【辗转相除】

3、欧拉函数

欧拉函数
线性筛求多个数的欧拉函数
欧拉定理

4、快速幂

快速幂
快速幂求逆元【模数为质数】

5、扩展欧几里得算法

扩展欧几里得、裴蜀定理
线性同余方程、扩展欧几里得求逆元【a和模数互质】

6、中国剩余定理

7、高斯消元

8、组合计数

9、容斥原理

能被整除的数

10、概率与数学期望

11、博弈论

NIM游戏
移棋子游戏

12、其他

模运算规则

八、其他

你可能感兴趣的:(刷题,算法)