| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| [01背包问题](2. 01背包问题 - AcWing题库) | 背包容量$m$,物品数$n$,每个物品只能选一次, | 第一层循环枚举所有物品,第二层循环倒着枚举体积 | ||||
| 完全背包问题 | 背包容量$m$,物品数$n$,每个物品可以无限选 | 第一层循环枚举所有物品,由于不限制每个物品的数量第二层循环正着枚举体积。注意公式的化简过程 | ||||
| [多重背包问题](6. 多重背包问题 III - AcWing题库) | 背包容量$m$,物品数$n$,每个物品数$s_i$,$o(nms)$ | 第一层循环枚举所有物品,第二层循环枚举每个物品数量,第三层循环倒着枚举体积 | ||||
| 5. 多重背包问题 二进制优化 | 背包容量$m$,物品数$n$,每个物品数$s_i$,$o(nmlog(s))$ | 第一层循环枚举所有物品,第二层循环枚举每个物品数量时,用二进制的枚举方法,最后再枚举一次余数,第三层循环倒着枚举体积 | ||||
| 7. 混合背包问题 - AcWing题库 | ||||||
| 8. 二维费用的背包问题 - AcWing题库 | 背包容量$v$,背包限重$m$,物品数$n$ | 一层循环枚举所有物品,第二层循环倒着枚举体积,第三层循环倒着枚举重量 | ||||
| 9. 分组背包问题 - AcWing题库 | 背包容量$m$,物品组数$n$,同组物品只能选一个 | 第一层循环枚举所有分组,第二层循环倒着枚举体积,第三层循环枚举组内的物品 | ||||
| 10. 有依赖的背包问题 - AcWing题库 | ||||||
| 11. 背包问题求方案数 - AcWing题库 | ||||||
| 12. 背包问题求具体方案 - AcWing题库 |
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 426. 开心的金明 - AcWing题库 | 裸01背包 | |||||
| 487. 金明的预算方案 - AcWing题库 | ||||||
| 3499. 序列最大收益 - AcWing题库 | ||||||
| 377. 组合总和 Ⅳ | 背包问题求方案数的小变形 | |||||
| 3382. 整数拆分 - AcWing题库 | 求一个数拆成n个二进制数(可重复,包含1)相加,的方案数 | |||||
| 139. 单词拆分 | 给定一个有n个字符串的字典,问模板串能否由字典里的 | |||||
| 5269. 从栈中取出 K 个硬币的最大面值和 | 有s个栈,栈中每个物品有不同价值,每次只能从栈顶取,取n次,使取到的价值最大 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 898. 数字三角形(模板) | 在三角形中,找一条和最大(小)的路径 | |||||
| 1015. 摘花生 (模板) | 在矩阵中,找一条和最大(小)的路径 | |||||
| 最低通行费(模板) | 在矩阵中,找一条和最大(小)的路径 | |||||
| 1212. 地宫取宝 - AcWing题库 | 在考虑路径的同时还要两个其他信息,四维状态5维循环 | |||||
| AcWing 275. 传纸条 | 在矩阵中,找一来一回2条和最大(小)的路径,同一个格子不能被重复选择 | 可以等价转换成:两个人同时从起点走到终点,中间两个路径除了起点和终点之外没有交点 | ||||
| Acwing1027. 方格取数 | 在矩阵中走两次,求和最大(小)的路径,同一个格子不能被重复选择 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 895. 最长上升子序列(模板) - AcWing题库 | 遍历每一个数,以该数作为上升子序列的结尾;对于每个数,看它前面的所有数,如果有比它小的数,前边界+1。最后再看看哪个数结尾的上升子序列最大 | |||||
| 896. 最长上升子序列 II(优化nlogn) - AcWing题库 | 对于每个a[i],把它接在小于a[i]的最大的数的后面,思路与dp无关;由于是往答案里插数,答案是单调递增的,所以可以用二分来找小于a[i]的最大的数 | |||||
| 897. 最长公共子序列 - AcWing题库 | dp[i,j]表示a的前i个字母,和b的前j个字母的最长公共子序列长度 | |||||
| 3510. 最长公共子序列(优化nlogn) - AcWing题库 | a数组无重复元素,且a,b长度相同。求数组b',为数组b在a中出现的位置。b'的子序列,对应一个b的子序列;b'的上升子序列,对应a的一个子序列。所以b‘的最长上升子序列,对应了a和b的最长公共子序列 | |||||
| 最大上升子序列和 | ||||||
| 3662. 最大上升子序列和 - AcWing题库 | ||||||
| 368. 最大整除子集 | 返回给定序列的一个最大子集,满足任意两个数满足整除关系 | 本题的关键是如何存下这个序列 | ||||
| 怪盗基德的滑翔翼 | 维护正向和反向的最长上升子序列 | |||||
| 登山 | 求一个先上升后下降的最长子序列 | |||||
| AcWing 482. 合唱队形 | 求一个先上升后下降的最长子序列 | |||||
| Acwing1012-友好城市 | ||||||
| 导弹拦截 | 求序列最少被几个最长不升子序列覆盖。思路类似于贪心求最长上升子序列。对于每个$a[i],$把它接在大于$a[i]$的最小的数的后面。相当于第一问求最长不升子序列,第二问求严格最长上升子序列。因为每有一处上升子序列,说明出现了一次单调性翻转 | |||||
| 187. 导弹防御系统 - AcWing题库 | 求w[i]用最少的上升子序列和下降子序列完全覆盖该数组求该方案的上升子序列和下降子序列的总个数 | |||||
| 115. 不同的子序列 | 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 |
公共子序列的变形 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 1473. 粉刷房子 III | ||||||
| 899. 编辑距离 - AcWing题库 | ||||||
| 3414. 校门外的树 - AcWing题库 | 一维 | |||||
| 821. 跳台阶 - AcWing题库 | 每次跳一下或2下,求跳到n的方案数 | |||||
| 435. 传球游戏 - AcWing题库 | 一个环形上,每个人每次可以选择向左或向右传,求传回自己的方案数 | |||||
| 403. 青蛙过河 | 给一个石子序列,青蛙一开始可以跳1,连续跳会有加速度,求青蛙是否能从起点跳到终点 | |||||
| 91. 解码方法 | 求给定字符串映射成字母的方案数 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| Acwing1064国王 | AcWing 1064. 小国王【线性状压DP+滚动数组优化+目标状态优化】 - AcWing | AcWing 1064. 小国王(Python) - AcWing | ||||
| 327. 玉米田 - AcWing题库 | ||||||
| 292. 炮兵阵地 - AcWing题库 | ||||||
| NOIP2016 提高组 愤怒的小鸟 | ||||||
| 529. 宝藏 - AcWing题库 | ||||||
| 3300. 食材运输 - AcWing题库 | 从图上某个点出发,使要经过所有指定的点的路程的最大值最小 | |||||
| 1723. 完成所有工作的最短时间 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 面试翻车之——股票专题 - AcWing | 各种限制条件下的交易问题 | |||||
| AcWing 1052. 设计密码 - AcWing | KMP+状态机dp(巨难) | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 282. 石子合并 - AcWing题库 | 把n堆石子变成一堆,最少要消耗多少体力 | 先预处理前缀和;枚举区间长度和左端点,枚举中间的分界点k$dp[i][j] = dp[i][k]+dp[k][j]$+把这两堆搬到一起的体力,即两段区间和 | ||||
| Acwing.1068. 环形石子合并 | n堆石子环形摆放 | 把数组复制一份接在后面,在$2n$上求,区间长度为$n$,左端点枚举$[1,2n]$,最后求一下哪一个长度为n的区间值为最值 | ||||
| 320. 能量项链 - AcWing题库 | 展开的方式只是将$a[1]$,补在了后面 | |||||
| 479. 加分二叉树 - AcWing题库 | 只给出一颗二叉树的中序遍历序列,要求还原出一颗分值最大的二叉树 | |||||
| 1069. 凸多边形的划分 | 虽然看起来是环形,但每个底边都是一样的只需要枚举也称长度为n的即可 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| P2657 windy 数 | 在$[a,b]$之间,不含前导零且相邻两个数字之差至少为 2的正整数 | |||||
| P2602数字计数 | 在 |
|||||
| 1082. 数字游戏 | 在 |
|||||
| 1084. 数字游戏 II | 在 |
|||||
| 1085. 不要62 | 在 |
|||||
| 1086. 恨7不成妻 | 在 |
AcWing 1086. 恨7不成妻 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 337. 打家劫舍 III | 在树上打劫,且不能连续打劫相邻的房子,求最大价值 | |||||
| 285. 没有上司的舞会 - AcWing题库 | 树中的点,树的每一条边的两端,至多选一个点,求有点覆盖的所有边权和最大的方案,求最大值 | |||||
| 323. 战略游戏 - AcWing题库 | 树的每一条边的两端,至少选择一个端点,使得所有边能被覆盖,求选择点数的最小值 | |||||
| Acwing323. 战略游戏 | 树中每个点安排守卫都有不同的花费。在树中尽可能少代价,使得树中的每一个点都能被观测到 | |||||
| Acwing1072树的最长路径 | 求树中的一条最长路径 | 找到从树上的某点到叶子节点的两条最长边相加 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 45. 跳跃游戏 II | ||||||
| 10. 正则表达式匹配 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 4009. 收集卡牌 - AcWing题库 | dp在求数学期望中的应用 | |||||
| 885. 求组合数 I - AcWing题库 | dp求组合数,利用了组合数的性质 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 1214. 波动数列 - AcWing题库 | 通过推导数学公式,利用余数的性质进行状态转移 | AcWing 1214. 波动数列 - AcWing(注意证明过程) 蓝桥杯 波动数列 01背包 |
||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 3230. 游戏 - AcWing题库 | 障碍物只在特定时间段存在 | dis数组多维护一个时间维,存点信息用结构体 | ||||
| 3200. 无线网络 - AcWing题库 | 路由器有一个信号范围,给出可放路由器的位置,求至少选多少个路由器可以让网络连通 | 点的个数少坐标范围大,用邻接表存图 | ||||
| 3255. 行车路线 - AcWing题库 | 有2种路,走大路和小路的疲劳值不同,问在走最短路的情况下的最小疲劳值 | 发现点数少,小路最多只有1000条,$dis[i][j]$表示从起点走到i,且最后一段小路长是j的疲惫值; | ||||
| AcWing 1112. 迷宫) | 普通的迷宫问题,注意dfs写法只能知道两个点之间是否联通 | |||||
| 1113. 红与黑 - AcWing题库 | 地上只有红与黑两种颜色的砖,每次只能向黑砖移动,问多少黑砖可达 | |||||
| AcWing 1116. 马走日 | 嘛在棋盘上以“日”子跳,问算马可以有多少途径遍历棋盘上的所有点 | 注意方向数组的写法,用dfs维护的步数是全局变量;要回溯,同一点有多种跳法,可能会用多次 | ||||
| NOIP2000单词接龙 | 给一组单词,问接龙后的串的最大长度是多少 | 维护一个$g[i][j]$,表示,单词i和j之间的重合长度是多少 | ||||
| 给定$n$个正整数,将它们分组,使得每组中任意两个数互质,至少要分成多少个组? | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| AcWing 1097. 池塘计数 | 求矩阵中连通块的数量(8连通) | Flood Fill是维护一个st矩阵,在主函数中,一遇到水就开始搜。只有一个点周围全是水的时候才继续往下搜,每搜到一个符合条件的点,就在st数组中标记一下。每次搜完就搜到一个完整的连通块,进行计数 | AcWing 1097. 池塘计数 - AcWing | LakeCounting.cpp | ||
| Acwing1106山峰和山谷 | 求矩阵中最高点和最底点的数量(相对应每个点周围的8个点) | 在搜的同时设置2个变量,判断每个点是否比周围的点大(小)并用这两个变量分别标记,在主函数中Flood Fill时统计山峰和山谷的个数 | Acwing1106山峰和山谷/RidgesAndValleys) | |||
| 2060. 奶牛选美 - AcWing题库 | 求矩阵中两个联通块之间的最短曼哈顿距离 | 关键是考虑如何存下不同连通块的点,每次搜索,将当前符合的点存在一个数组中 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 173. 矩阵距离 - AcWing题库 | 求一个01矩阵每个点的与其最近的1之间的距离 | 建立一个虚拟原点到所有起点的边权都为0,就转化成了单源最短路问题 | ||||
| 3205. 最优配餐 - AcWing题库 | 有多个点店家和多个顾客,求送餐的最小总路线 | 注意最后答案是把所有顾客点距离相加乘上订单数,注意用结构体存下这个信息 | ||||
| 3317. 重力球 - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 175. 电路维修 - AcWing题库 | ||||||
| 340. 通信线路 - AcWing题库 | ||||||
| 2019. 拖拉机 - AcWing题库 | 把障碍物看成权值为1的边,空地看成权值为0的边,就转换成了最短路问题。由于只有2种边权,所以可以用双端队列代替djs中的堆 | |||||
| P4011 孤岛营救问题 - 洛谷 | 将用有钥匙的状态压缩成一维,$d[x,y,state]$表示一个点,状态转移看成边,捡到钥匙边权为0,移动边权为1 |
dfs是一种比较万能,但难以理解的做法,总结有以下几个思考要点:
1.每一层需要维护哪些变量
2.哪些变量可以维护成全局变量(一般是求最值)
3.是否需要回溯(如果只需按一定限制走到叶子节点,就不需要回溯;如果不确定从根节点到叶子节点的路径是否为1个合法答案,则考虑回溯)
4.每一层有多种情况,才需要用for循环枚举;若每一层只有一种情况,且叶子节点为终点,那么这个问题一定可以递推解决
5.如果
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 165. 小猫爬山 - AcWing题库 | src/Acwing165小猫爬山 | |||||
| 166. 数独 - AcWing题库 | src/Acwing166数独 | |||||
| 167. 木棒 - AcWing题库 | src/Acwing167木棒 | |||||
| 168. 生日蛋糕 - AcWing题库 | src/Acwing168生日蛋糕 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 |
|---|---|---|---|---|
| 17. 电话号码的字母组合 - 力扣 | 给定一个仅包含数字 2-9 的字符串,返回这串数能在九键输入法中打出的所有字母组合 |
将答案维护在了dfs的遍量中 | ||
| 3734. 求和 - AcWing题库 | 求在int范围内所有的各个数位只包含4或7的所有数的和 | dfs枚举叹为观止 | ||
| 241. 为运算表达式设计优先级 | 给一个算数表达式,返回在所有运算顺序下得到的所有不同结果 | |||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 3483. 2的幂次方 - AcWing题库 | 将一个数用二进制表示,输出格式类似于秦九韶的格式 | src/Acwing3483二的幂次方 | ||||
| 3284. 化学方程式 - AcWing题库 | 处理带括号类的字符串:左括号-右括号-括号内 | src/ccf第18次认证_3化学方程式 | ||||
| 1225. 正则问题 - AcWing题库 | 求一个正则表达式表达的字符串的可能的最大长度 | src/Acwing1225正则问题 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 |
|---|---|---|---|---|
| 459. 螺旋矩阵 - AcWing题库 | 按螺旋顺序依次将1-n填入矩阵 | 在dfs中维护了规模的范围,范围层层递减 | AcWing 459. 螺旋矩阵 - AcWing | |
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 139. 单词拆分 | 剖析三种解法: DFS, BFS, 动态规划 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 170. 加成序列 - AcWing题库 | 给定一个数n | |||||
这里常用的邻接表,链表插入新数据时,是在数组连接端插入
| 题目链接 | 题意描述 | 题目总结 | c++题解python3题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 849. Dijkstra求最短路 I - AcWing题库 | ||||||
| 850. Dijkstra求最短路 II - AcWing题库 | ||||||
| 853. Bellman-Ford —有边数限制的最短路 | 给定一个 |
随便存图,只需要保证能遍历到所有边即可,所以用结构体存图,为了防止更新距离的过程中,用先更新的距离去更新其他距离,每次遍历要copy一下dis数组;因为有负权边,要注意正无穷的判断 | ||||
| 851. spfa求最短路 - AcWing题库 | ||||||
| 852. spfa判断负环 - AcWing题库 | 原理是从起点走的步数超过点数还能走,说明在有环 | |||||
| 4196. 最短路径 - AcWing题库 | 求最短路的一条具体路径 | |||||
| Acwing1129热浪 | ||||||
| Aciwng1128.信使 | Acwing1128_Messager.cpp | |||||
| Acwing1126最小花费 | Acwing1126_MinimumCost.cpp | |||||
| 920. 最优乘车 - AcWing题库 | ||||||
| Acwing1135 | ||||||
| 340. 通信线路 - AcWing题库 | ||||||
| 342. 道路与航线 - AcWing题库 | ||||||
| 341. 最优贸易 - AcWing题库 | 给定一张图,每个点都有一个价值,找出一条路径,使在路径上某个点买入,另一个点买出,赚到的最大差价,求这个差价 | 正向,反向建2个图,正向求最大值,反向求最小值 |
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 858. Prim算法求最小生成树 - AcWing题库 | ||||||
| 859. Kruskal算法求最小生成树 - AcWing题库 | ||||||
算法流程:维护每个点的入度和出度,每次将入度为0的点(t)加入队列,然后进行宽搜,枚举t的所有出边。删掉出边后,若扩展点入度为0,可以继续入队。若为手写队列,队列中点的正序即为拓扑序
注意:拓扑排序后,n个点一定全部都在队列中,如果不全,说明无拓扑序
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| AcWing 1191. 家谱树 | 模板题 | |||||
| AcWing 1192. 奖金 | 给定员工的n对关系,每一对要求开资a比b大,求给所有员工开资的最小值 | 先拓扑排序,然后根据差分约束的知识求最长路 | ||||
二分图指可以把图中的点分到两个集合中,使得集合内部的点之间没有边
匈牙利算法:在二分图中求出最大匹配的个数。一对匹配指集合a和b中的两个点,一个点最多和一个点之间有一条边
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| AcWing 860. 染色法判定二分图 - AcWing | ||||||
| 257. 关押罪犯 - AcWing题库 | 给若干对罪犯之间的冲突关系,现在要重新分配牢房,使总冲突最小 | 二分答案,如果大于答案的所有边可以构成一个二分图,即找到答案 | ||||
| P3386 【模板】二分图最大匹配 | 匈牙利算法模板,求二分图中最大匹配点的对数 | 遍历所有女生,遍历所有妹子看上的男生,如果那个男生没有喜欢的人,或者那个男生喜欢的妹子有其他备胎,就将这一对匹配成功 | ||||
| 372. 棋盘覆盖 - AcWing题库 | 往一个矩阵中(有障碍物),不重叠的放长为 2、宽度为 1的小矩形,最多能放多少 | 将矩阵的每个格子看成点,分奇偶建立二分图,能放一个小矩形,就是在二分图中有一组匹配,问题转化为求最大匹配个数 | ||||
| 376. 机器任务 - AcWing题库 | ||||||
| 378. 骑士放置 - AcWing题库 | ||||||
使用场景
题目求最大(最小)值,给出一些不等关系,求最大值,用最短路,求最小值,用最长路;存在(负环)正环即为无解
使用条件
1.必须有一个绝对关系;2.必须有一个超级源点可以到达所有点
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| P5960 【模板】差分约束算法 | ||||||
| Acwing 1169. 糖果 | ||||||
| 362. 区间 - AcWing题库 | ||||||
| Acwing 1170. 排队布局 | ||||||
| 393. 雇佣收银员 - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 1929. 镜子田地 - AcWing题库 | 求光路在矩阵中反射的最多次数 | 把镜子看成点,光路看成无向边,每个点的入度只能是1或2,从外部射入的光线必然是由环和链组成的图 | ||||
1.流网络:指一个有向图,图中的每条边都有一个非负的容量值,且有2个超级点,源点和汇点,图中至少有一条路径从源点走到汇点是联通的
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 普通队列 | hh = 0,tt = -1;插入:q[++tt];出队:q[hh++] | |||||
| 循环队列 | hh = 0,tt = 1;插入:q[tt++];出队:q[hh++] | |||||
| 数组模拟邻接表的几种写法 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 836. 合并集合 - AcWing题库 | ||||||
| 837. 连通块中点的数量 - AcWing题库 | 在初始化并查集时每个点维护,当前点所在连通块中的点的数量 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 4310. 树的DFS - AcWing题库 | 树的模板题,树的邻接表存储和dfs方法 | |||||
| 103. 二叉树的锯齿形层序遍历 | 层序遍历时,奇数层从左向右,偶数层从右向左 | |||||
| 124. 二叉树中的最大路径和 | ||||||
| 117. 填充每个节点的下一个右侧节点指针 II | ||||||
| 4313. 满二叉树等长路径 - AcWing题库 | 给一颗满二叉树,每一次操作可以任意改变一条边的权值,求式根节点到每个叶子节点的权值和等长的最小操作次数 | |||||
适用范围:快速求区间和(前缀和)+单点修改
树状数组只能在连续的值域上操作,不能直接操作给定序列
| 题目链接 | 题意描述题目总结 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 241. 楼兰图腾 - AcWing题库 | 求给定的坐标中,能构成多少个形状v和^ |
算v时以下面那个点是第几个点划分集合,分别统计每个下端点左边和右边有多少个比它大的数,根据乘法原理把两数相乘,即为结果。对于^同理。即求每个数的前缀和和后缀和 |
||||
| 242. 一个简单的整数问题 - AcWing题库 | 在序列中区间修改,单点查询 | 在tr里存差分数组,利用差分把区间修改变为单点修改 | ||||
| 243. 一个简单的整数问题2 - AcWing题库 | 序列中动态维护:给某个区见上的数都加一个数,和求区间和 | 用查封维护操作1 | ||||
| 3662. 最大上升子序列和 - AcWing题库 | 用树状数组来维护前缀中的最大值 | 树状数组+离散化 | ||||
| 4316. 合适数对 - AcWing题库 | 求某个数的动态排名 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| AcWing 1275. 最大数 | ||||||
| 245. 你能回答这些问题吗 - AcWing题库 | 线段树模板(区间查询+单点修改,不用pushdown;区间查询+区间修改需要pushdown)。求最大连续子段和 | 求最大连续子段和,需要维护前缀最大和,后缀最大和,区间最大和,区间和 | ||||
| 246. 区间最大公约数 - AcWing题库 | 利用了差分的性质和欧几里得(gcd)的性质 gcd(a,b)=gcd(a,b−a),将区间修改转换为单点修改,省去了pushdown操作 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解Java题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 前缀统计 | ||||||
| 208. 实现 Trie (前缀树) | 注意数组版和节点版的写法 | |||||
| 3485. 最大异或和 | ||||||
| 161. 电话列表 - AcWing题库 | ||||||
| 144. 最长异或值路径 - AcWing题库 | 输上的异或路径 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 128. 编辑器 - AcWing题库 | 用两个栈顶相对的栈处理中间问题 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 830. 单调栈 - AcWing题库 | 单调栈模板 | |||||
| 131. 直方图中最大的矩形 - AcWing题库 | 单调栈模板,求在连续直方图中,面积最大的矩形 | AcWing 131. 直方图中最大的矩形 - AcWing | ||||
| 152. 城市游戏 - AcWing题库 | 单调栈模板,求只含特定字符的子矩阵的最大面积 | |||||
| 85. 最大矩形 - 力扣) | ||||||
| 41. 包含min函数的栈 - AcWing题库 | 可以在O(1)时间内检索出最小元素的栈 | |||||
| 3516. 最大面积 - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 154. 滑动窗口 - AcWing题库 | ||||||
| 239. 滑动窗口最大值 | ||||||
| 480. 滑动窗口中位数 | ||||||
| 3. 无重复字符的最长子串 | map做滑动窗口统计出现次数 | |||||
| 76. 最小覆盖子串 | map做滑动窗口统计出现次数 | |||||
| 1238. 日志统计 - AcWing题库 | ||||||
| 1969. 品种邻近 - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 19. 删除链表的倒数第 N 个结点 | ||||||
| 206. 反转链表 | 必须死记住 | |||||
| 92. 反转链表 II | ||||||
| 23. 合并K个升序链表 - 力扣 | ||||||
| 86. 分隔链表 | 用2个中间节点分别把大数和小数连在后面,最后合并两个链表 | |||||
| 234. 回文链表 - 力扣 | 快慢指针找中点+反转后半个链表+比较两个链表的值 | |||||
| 题目链接 | 题意描述题目总结 | 题目总结c++题解 | c++题解python3题解 | python3题解Java题解 | Java题解自己的代码 | 自己的代码 |
|---|---|---|---|---|---|---|
| 1210. 连号区间数 - AcWing题库 | 通过序列是排列的乱序,优化判断每个区间是否连号 | AcWing 1210. 连号区间数 - AcWing | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 5253. 找到指定长度的回文数 | 给你一个整数数组 q和一个 正 整数 n,请你返回一个数组 res,其中 res[i] 是长度为 n的 正回文数 中第 q[i] 小的数字,如果不存在这样的回文数,则为 -1 | |||||
| 4395. 最大子矩阵 - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 795. 前缀和 - AcWing题库 | 模板 | |||||
| 1310. 子数组异或查询 | 异或运算也具有前缀和的性质 | |||||
| 523. 连续的子数组和 | 利用前缀和和同余性质优化区间的枚举 | |||||
| 1230. K倍区间 - AcWing题库 | 和连续子数组和是同一题,问的是个数 | |||||
| 1236. 递增三元组 - AcWing题库 | 先枚举b[i]数组,用前缀和+大数组在a[]数组中找有多少个数比b[i]小,在c[]数组中找有多少个数比b[i]大 然后两个数相乘 |
AcWing 1236. 递增三元组 (二分+双指针+前缀和) - AcWing | ||||
| 1913. 公平摄影 - AcWing题库 | 找奇偶数个数相同的最长连续区间的长 | 注意题目要求同一连续的数也是 可以的 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 邻域均值 | 统计有多少个正方形区域的平均值小于给定值;注意计数平均值要用乘法 | |||||
| 99. 激光炸弹 - AcWing题库(原地前缀和) | 统计一个稀疏矩阵和最大的一个方形区域;注意前缀和都是从1开始,对稀疏矩阵坐标要进行+1处理 | |||||
| 363. 矩形区域不超过 K 的最大数值和(前缀和+二分优化) | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 797. 差分 - AcWing题库 | 差分模板: 给一个区间所有数同时加上一个数;差分数组的每个数的前缀和就是原数 ;所以改变差分数组的一个数,所有求前缀和时用到这个数的都会受到影响 |
|||||
| 100. 增减序列 - AcWing题库 | 每次给任意一个区间所有数+1或者-1,求多少次操作后,所有数相等;本题要理解差分数组本身的含义:表示原数组中每两个相邻数的差;将原数组都变成一样等价于将差分数组下标大于1的数都变为0;所以优先选择一对(正,负)操作 | AcWing 100. IncDec序列 - AcWing | ||||
| 101. 最高的牛 - AcWing题库 | 已知数组中的最大数,和一些数之间的关系,求原数组每个数的最大可能值 | AcWing 101. 最高的牛 - AcWing | ||||
| 2014. 岛 AcWing题库 | ||||||
| 4007. 非零段划分 AcWing题库 | 已知数组中的每个数的值,和数组中的最大数,求一些数之间的关系 | |||||
| 1922. 懒惰的牛 - AcWing题库 | 求长度不超过2k的最大区间和 | 虽然题目给的是单点的信息,但这个点影响的是附近2k的区间,所以可以用差分改变所有区间内的数,如果可吃到多个点,点必然会被区间影响,最后找到值最大的点即为答案 | ||||
| 题目链接 | 题意描述题目总结 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 798. 差分矩阵 - AcWing题库 | 二维差分模板: 给一个子矩阵所有数同时加上一个数 |
|||||
| 题目链接 | 题意描述题目总结题目总结 | 题目总结c++题解c++题解 | c++题解python3题解python3题解 | python3题解Java题解Java题解 | Java题解自己的代码 | 自己的代码 |
|---|---|---|---|---|---|---|
| 2068. 整数拼接 - AcWing题库 | 通过同余的性质来预处理一个表 ,优化枚举 |
AcWing 2068. 整数拼接--(m-a[i]%m)%m的解释 - AcWing | ||||
| 题目链接 | 题意描述题目总结 | 题目总结c++题解 | c++题解python3题解 | python3题解Java题解 | Java题解自己的代码 | 自己的代码 |
|---|---|---|---|---|---|---|
| 866. 试除法判定质数 - AcWing题库 | ||||||
| 867. 分解质因数 - AcWing题库 | 列出一个数所有的质因子和每个质因子的次数,$o(\sqrt{n})$ | 因为从2开始遍历,且每遍历到一个因子,就把该因子除干净,除的次数就是因子的次数,所以实际上遍历到的都是质因子 | ||||
| 868. 筛质数 - AcWing题库 | 朴素筛(弃用) | |||||
| 埃式筛法,$o(n)$ | 在遍历从0到n的所有数的过程中,每找到一个质数,就把它的质倍数全部标记 |
|||||
| 869. 试除法求约数 - AcWing题库 | ||||||
| 870. 约数个数 - AcWing题库 | ||||||
| 97. 约数之和 - AcWing题库 | ||||||
| 872. 最大公约数 - AcWing题库 | b ? gcd(b,a%b):a; |
|||||
| 196. 质数距离 - AcWing题库 | 求一个区间[L,R]内的所有质数;区间长度校,L,R很大 | 先找出[2,x],区间长度为[L,R]的所有质数,然后筛掉所有[L,R]间[2,x]的倍数;注意找起筛点倍数时要上取整,且不能小于2倍 |
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 885. 求组合数 I - AcWing题库 | ||||||
| 886. 求组合数 II - AcWing题库 | ||||||
| 887. 求组合数 III - AcWing题库 | ||||||
| 888. 求组合数 IV - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 4009. 收集卡牌 - AcWing题库 | 共n种卡牌,给出获得每一张卡牌的概率,且用k张相同的牌可以换任意一张牌,求集齐全部卡牌的概率 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 363. 矩形区域不超过 K 的最大数值和 | 二分优化前缀和 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 730. 机器人跳跃问题 - AcWing题库 | 只要答案大于等于最大值,答案一定满足要求 | |||||
| 1011. 在 D 天内送达包裹的能力 | ||||||
| 1482. 制作 m 束花所需的最少天数 | ||||||
| 3745. 牛的学术圈 I - AcWing题库 | ||||||
| 257. 关押罪犯 - AcWing题库 | 满足性质的所有点都在一个合法的二分图中 | |||||
| 1659. 社交距离 I - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 790. 数的三次方根 - AcWing题库 | 注意整数二分和浮点数二分模板的区别 | |||||
| 102. 最佳牛围栏 - AcWing题库 | 求一段长度至少为f的不定长区间的最大和 | 可以在前缀和数组上遍历后一个指针,前一个指针取遍历过的最小值 | AcWing 102. 最佳牛围栏 - AcWing | |||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 113. 特殊排序 - AcWing题库 | 大小不具备传递性,比如a < b,b < c 并不能推出a < c;本题与贪心优化最长上升子序列模型一样,在答案中找<i的最大数,将新数插入到这个位置 | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 905. 区间选点 - AcWing题库 | 请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。求最小点的数量 | 将每个区间按照右端点从小到大进行排序;如果本次区间和上次区间无交集, ed < range[i].l说明需要选择一个新的点, res ++ ; ed = range[i].r; | ||||
| 908. 最大不相交区间数量 - AcWing题库 | 请你在数轴上选择若干区间,使得选中的区间之间互不相交 | 将每个区间按照右端点从小到大进行排序;依次遍历排序好的区间。如果区间的左端点大于当前放置点的位置,说明当前点无法覆盖区间,则把点的位置更新成该区间的右端点,表示在该区间的右端点放置一个新的点,同时更新点的个数 | ||||
| 906. 区间分组 - AcWing题库 | 请你将这些区间分成若干组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。 | |||||
| 907. 区间覆盖 - AcWing题库 | 从前往后枚举每个区间,在所有能覆盖start的区间中,选择右端点的最大区间,然后将start更新成右端点的最大值 | 将所有区间按照左端点从小到大进行排序 | ||||
| 4307. 数字重构 - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 55. 连续子数组的最大和 - AcWing题库 | 数组里的数有正有负。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。 | 从前往后贪心,如果当前数的前缀和为负,说明当前区间一定对答案无贡献,答案的区间就更新为下一个点开始的区间;如果所有数都为负,该方法也能找到最大的负数 | ||||
| 126. 最大的和 - AcWing题库 | 求二维矩阵中和最大的一个子矩阵 | 枚举左上角和右下角是$o(n^4)$;所以,先预处理每一列的前缀和,枚举上下两个边界,将边界中的所有行通过列前缀和压缩为一行,问题就转换为55. 连续子数组的最大和 ,整体时间复杂度为$o(n^3)$ | ||||
| 179. 最大数 | 由给定数组里的数字能组成的最大的数是多少 | |||||
| 1453. 移掉K位数字 | 给1个数字,可以删掉任意k位,使得到的数最小 | 该题的思路是先删除数串中的逆序对,再从后往前删除,去除前导零,即可得到最小值 | AcWing 1453. 移掉K位数字 - AcWing | |||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 787. 归并排序 - AcWing题库 | ||||||
| 788. 逆序对的数量 - AcWing题库 | 求数组中每个数右边比它小的数的个数,并求和 | 其实就是求排序过程中有多少次交换 | 逆序对的数量 【离散化/树状数组】 | |||
| 1934. 贝茜放慢脚步 - AcWing题库 | 有2种记录:时间和距离;在跑1000米的过程中,每当到记录中的时间或距离就减速一次,问多长时间跑完1000米 | 用时间和距离数组从前向后进行二路归并,判断条件从比较数的大小变成了比较每个时间差有没有走到给出的距离 | ||||
| 36. 合并两个排序的链表 - AcWing题库 | 将两个有序链表合并为1个有序链表 | |||||
| 264. 丑数 II | 请你找出并返回第 n 个 只包含质因数 2、3 和或 5 的正整数。 | 2,3,5三路归并 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 187. 重复的DNA序列 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 1241. 外卖店优先级 - AcWing题库 | ||||||
| 1001. 网格照明 | 用哈希表存储每行,列,左对角线,右对角线的灯的情况,保证每次操作都是o(1) | |||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 1003. 检查替换后的词是否有效 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 3219. 模板生成系统 - AcWing题库 | ||||||
| 3244. Markdown - AcWing题库 | ||||||
| 3199. 命令行选项 - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| CF2C Commentator problem | 给出三个互不相交的圆,求一个点使得到这三个圆的切线夹角相同。 | 模拟退火 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 104. 货仓选址 - AcWing题库 | 求数轴上一个点到其他所有点的距离值和最小 | 求序列的中位数就是所求的点 | ||||
| 122. 糖果传递 - AcWing题库 | 每个点只能向左右两边传递,求环形上使所有点糖果数都相等的最小代价 | |||||
| 105. 七夕祭 - AcWing题库 | 矩阵上的环形传递问题 | 行和列是相互独立的行列分别求一遍环形传递 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 28. 实现 strStr() | kmp模板 | |||||
| 4312. 出现次数 - AcWing题库 | 求子串在原串的某一区间出现了多少次 | kmp预处理+前缀和 | ||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 73. 数组中只出现一次的两个数字 | 异或得到 x^y;取 x与y中第k位为1的数;将数分为两个集合,第k位为1的集合和第k位不是1的集合;其中x y分别在这两个集合,且相同的元素是在同一个集合里面;于是将其转化成了求重复数字中的单个数值的问题 | |||||
| 190. 颠倒二进制位 - 力扣 | 将一个二进制数翻转 | |||||
| 998. 起床困难综合症 - AcWing题库 | ||||||
| 题目链接 | 题意描述 | 题目总结 | c++题解 | python3题解 | Java题解 | 自己的代码 |
|---|---|---|---|---|---|---|
| 6035. 选择建筑的方案数 | 给定1个01字符串,求子序列中101和010的数量 |
|||||
| 1884. COW - AcWing题库 | 给定一个只有cow3种字母的字符串,求子序列中cow的数量 |
|||||
