
Acwing算法课学习笔记记录
文章平均质量分 79
Acwing算法课的学习记录,希望自己成为算法大蛇
hongjianMa
大二计科,我曾踏足山巅,也曾坠入低谷,二者都让我受益良多。
学习方向:算法+推荐系统+Java软件开发,交流q群:244188291
展开
-
【动态规划】大盗阿福(状态机)
但如果抢劫了两家相邻的店铺,就会触发报警。问在不触发报警的情况下,阿福最多能抢到多少钱?无论多难的题,只要一步步分析,总能找到最优解。我们需要考虑每家店铺抢或不抢的情况,并确保不触发报警。只要正确分析状态,代码实现就很简单。家店铺,每家店铺有现金。,才能拿到最大的收获!阿福要抢劫一条街上的。原创 2025-04-11 09:25:48 · 336 阅读 · 0 评论 -
【BFS】池塘计数(Flood Fill算法 + BFS/DFS)
的经典应用,通过BFS/DFS标记连通区域。的矩形土地,部分区域被水淹没。要求计算整个矩阵中有多少片独立的池塘。原创 2025-04-10 23:31:24 · 811 阅读 · 0 评论 -
【BFS】 迷宫问题(BFS + 路径记录)
【代码】【BFS】 迷宫问题(BFS + 路径记录)原创 2025-04-10 23:23:19 · 713 阅读 · 0 评论 -
【数学】樱花(质因数分解 + 线性筛)
本题考察数学变形和质因数分解的应用,结合线性筛法优化计算。的因数个数问题,再通过质因数分解求解。题目要求我们找到所有正整数对。,使得它们的倒数之和等于。,求有多少正整数数对。原创 2025-04-10 15:06:10 · 988 阅读 · 0 评论 -
【并查集】程序自动分析(并查集+离散化)
本题是并查集+离散化用离散化处理稀疏大范围数据用并查集维护等价关系通过处理顺序避免逻辑错误。原创 2025-04-09 23:13:14 · 821 阅读 · 0 评论 -
【动态规划】设计密码(KMP + dp状态机)
通过状态转移避免暴力匹配,高效计算合法密码数。关键在于利用 KMP 的。—— 愿你在算法的世界里,永远保持热血,勇往直前!数组优化匹配过程,确保 DP 的正确性。较小(≤50),我们可以采用。求满足条件的密码总数,结果对。来高效计算合法方案数。我们需要设计一个密码。原创 2025-04-08 22:59:02 · 820 阅读 · 0 评论 -
【并查集】格子游戏(并查集应用)
时,游戏结束,该玩家获胜。给定所有操作步骤,判断游戏在第几步结束,如果未结束则输出。的点阵上玩游戏,轮流在相邻的点之间画边(红边或蓝边)。当某次操作后形成一个。本题是并查集的经典应用,通过动态维护连通性快速判断环的存在。Alice和Bob在一个。原创 2025-04-08 22:54:25 · 721 阅读 · 0 评论 -
【动态规划】2022拆分为10个整数之和
将问题转化为动态规划是解决此类组合问题的有效方法逆序更新是避免重复计算的关键技巧合理设置状态表示可以大幅降低计算复杂度379187662种划分方法。原创 2025-04-08 10:55:25 · 352 阅读 · 0 评论 -
【动态规划】 装箱问题(01背包问题)
这道题是01背包问题的变种,将背包问题中的"价值"和"重量"都视为物品的体积。通过动态规划,我们能够高效地找到最优解。关键在于正确理解状态表示和状态转移,以及注意01背包问题的经典实现细节(如逆序枚举)。原创 2025-04-07 23:11:03 · 372 阅读 · 0 评论 -
【动态规划】采药(01背包问题)
本题是经典的01背包问题应用,通过动态规划可以有效解决。正确识别问题类型(01背包)设计合适的状态表示正确实现状态转移,特别是注意逆序遍历合理处理边界条件和初始化掌握01背包问题的解法对于解决许多类似的资源分配问题非常有帮助。原创 2025-04-07 22:54:33 · 615 阅读 · 0 评论 -
【动态规划】友好城市
本题的关键在于问题转化,将航道不相交的条件转化为求最长上升子序列问题。通过排序和动态规划(或贪心+二分)可以高效解决。对于N=5000的数据规模,两种方法都能通过,但优化解法效率更高。原创 2025-04-07 22:49:13 · 359 阅读 · 0 评论 -
【动态规划】传纸条
这道题通过三维动态规划巧妙地解决了双路径问题。使用步数k作为一维状态,简化位置表示通过i1≠i2的判断保证路径不相交四种状态转移覆盖所有可能的移动组合这种方法既保证了正确性,又具有较高的效率。原创 2025-04-07 22:44:34 · 748 阅读 · 0 评论 -
【动态规划】方格取数
这道题通过三维动态规划巧妙地解决了两次路径的最优问题。关键在于将两次行走看作同步进行,并通过步数和k来统一处理。这种方法避免了单独处理两次行走带来的复杂性,同时保证了不会重复计算同一格的值。原创 2025-04-07 22:40:18 · 267 阅读 · 0 评论 -
【动态规划】最低通行费
本题是一个典型的网格DP问题理解时间限制对移动方向的约束设计合适的状态表示和转移方程正确处理边界条件通过动态规划,我们能够高效地计算出最小费用路径。原创 2025-04-07 22:33:41 · 420 阅读 · 0 评论 -
【动态规划】摘花生
定义正确的状态表示找到合适的状态转移方程处理好边界条件选择正确的计算顺序这种"网格路径最优化"问题在动态规划中非常常见,类似的题目还有最小路径和、不同路径等,都可以用类似的思路解决。原创 2025-04-07 22:31:04 · 370 阅读 · 0 评论 -
【动态规划】导弹拦截 Dilworth定理
最长不上升子序列(第一问)最少链划分问题(通过Dilworth定理转化为最长上升子序列)关键点在于理解Dilworth定理的应用,以及正确实现两种不同的状态转移条件。代码简洁高效,完美解决了题目要求。原创 2025-04-07 22:23:53 · 836 阅读 · 0 评论 -
【动态规划】最大上升子序列和
本题通过动态规划高效地解决了最大上升子序列和问题,与最长上升子序列问题的区别在于状态表示的含义和转移时的操作。理解这种差异对于掌握动态规划的灵活应用非常重要。原创 2025-04-07 22:06:41 · 424 阅读 · 0 评论 -
【动态规划】登山模型-先上升后下降
本题是最长上升子序列的变形,通过正反两次动态规划求解。关键点在于理解“先上升后下降”的模型,并合并两部分结果。类似题目:AcWing 482. 合唱队形(几乎相同)。原创 2025-04-07 19:18:34 · 769 阅读 · 0 评论 -
【动态规划】子序列模型-怪盗基德的滑翔翼
本题的关键在于将问题转化为求最长下降子序列问题,并考虑两个方向的情况。通过动态规划的方法,我们可以高效地解决这个问题。代码实现上需要注意正向和反向两次计算,以及下降条件的正确判断。原创 2025-04-07 18:35:58 · 240 阅读 · 0 评论 -
【勒让德公式】欧拉筛-阶乘分解
本题通过欧拉筛法高效预处理质数,再应用勒让德公式计算每个质数在阶乘中的次数,实现了对阶乘的质因数分解。算法结合了数论中的筛法和阶乘性质,在O(n)时间复杂度内解决问题,是质因数分解的经典应用。原创 2025-04-06 20:29:29 · 372 阅读 · 0 评论 -
【欧拉筛】 夏洛克和他的女朋友题解
本题通过欧拉筛法预处理质数信息,将问题转化为二分图着色问题。关键在于发现质数和合数之间的二分图性质,从而确定最少只需要两种颜色即可满足条件。算法设计巧妙结合了数论和图论知识,实现了高效的解决方案。原创 2025-04-06 19:15:48 · 370 阅读 · 0 评论 -
【欧拉筛】哥德巴赫猜想题解
本题通过欧拉筛法预处理素数表,然后对每个查询进行快速验证,有效解决了哥德巴赫猜想的验证问题。算法设计充分利用了数论知识和预处理技巧,保证了在大数据量下的高效运行。原创 2025-04-06 19:11:44 · 323 阅读 · 0 评论 -
【动态规划】混合背包模板
求解如何装入物品,使得总体积不超过背包容量,且总价值最大。的核心思想,即可灵活解决此类问题。的混合问题,需要根据。原创 2025-04-04 12:16:44 · 897 阅读 · 0 评论 -
【数学】约数个数-约数之和原理与代码实现模板
通过质因数分解,我们可以高效地计算一个数的约数个数和约数之和。这两个问题在算法竞赛中经常出现,掌握其数学原理和实现方法非常重要。原创 2025-04-04 10:37:32 · 548 阅读 · 0 评论 -
【动态规划】二分优化最长上升子序列
本题通过贪心+二分的方法,将最长上升子序列问题的时间复杂度从O(n²)优化到O(nlogn),能够高效处理大规模数据。关键在于维护一个单调递增的数组,并通过二分查找来快速确定每个元素的插入位置。原创 2025-04-03 23:29:31 · 771 阅读 · 0 评论 -
【动态规划】最长公共子序列模板
的最长公共子序列(LCS)。子序列不要求连续,但必须保持相对顺序。熟练掌握 DP 的状态表示和转移方程是解决此类问题的关键!的子序列的字符串的最长长度。个字符的最长公共子序列长度。我们需要找到两个字符串。的最长公共子序列长度。原创 2025-04-03 17:23:49 · 1135 阅读 · 0 评论 -
【动态规划】最长上升子序列模板
本题是一个经典的动态规划问题,通过定义状态f[i]表示以第i个元素结尾的最长上升子序列的长度,然后通过状态转移逐步求解。最终结果是所有f[i]中的最大值。这种方法直观且易于理解,适合初学者掌握动态规划的基本思想。原创 2025-04-03 17:15:08 · 382 阅读 · 0 评论 -
【算法板子】Kruskal算法求最小生成树
Kruskal算法是求解最小生成树的经典算法,通过贪心策略选择边并结合并查集高效判断连通性。该算法适合稀疏图(边数较少的情况),代码实现简洁高效。需要注意图的连通性判断和边数统计等关键细节。原创 2025-04-03 15:04:33 · 364 阅读 · 0 评论 -
【Acwing】Floyd求最短路模板
Floyd算法是解决多源最短路径问题的经典算法,虽然时间复杂度较高,但对于小规模图非常适用。其优势在于实现简单,能处理负权边,并且可以一次性求出所有点对的最短距离,适合查询密集的场景。原创 2025-04-03 14:50:54 · 412 阅读 · 0 评论 -
【Acwing】SPFA 判断负环模板
SPFA 算法是检测负环的有效方法,通过队列优化减少了不必要的计算。该算法适用于稀疏图,在大多数情况下效率高于 Bellman-Ford 算法。关键点在于理解负环检测的原理和队列优化的实现方式。原创 2025-04-03 14:46:59 · 379 阅读 · 0 评论 -
【Acwing】spfa求最短路算法模板
SPFA算法是处理带负权边最短路径问题的高效算法,相比Bellman-Ford有显著优化。正确初始化距离数组合理使用队列和标记数组优化处理大规模数据时邻接表的高效存储边界情况(如不可达)的判断处理。原创 2025-04-03 14:41:04 · 546 阅读 · 0 评论 -
【Acwing】bellman-ford 有边数限制的最短路
Bellman-Ford算法是解决有边数限制最短路问题的经典算法,尤其适用于含负权边的图。关键点在于理解松弛操作和备份数组的作用,以及如何处理无穷大的情况。原创 2025-04-03 14:33:06 · 426 阅读 · 0 评论 -
【Acwing】Dijkstra模板
Dijkstra算法是解决正权图最短路径问题的经典算法。当m ≈ n²时(稠密图),使用朴素Dijkstra更优当m << n²时(稀疏图),使用堆优化Dijkstra更优本题中,由于n≤500,两种方法都可以通过,但堆优化版本在处理更大数据量时更具优势。原创 2025-04-03 14:23:16 · 892 阅读 · 0 评论 -
【Floyd多源最短路】牛的旅行
本题考察了图论中最短路径算法的应用,特别是Floyd算法的使用。关键在于理解牧场直径的定义,以及如何通过连接两个牧场来最小化新牧场的直径。Floyd算法虽然时间复杂度较高,但对于N≤150的数据规模是完全可行的。原创 2025-04-03 12:39:45 · 297 阅读 · 0 评论 -
【算法中的数学】欧拉筛埃氏筛
埃氏筛实现简单,适合初学者理解欧拉筛效率更高,适合大数据量根据题目数据范围n≤10⁶,两种方法都能通过,但欧拉筛更优。原创 2025-04-02 21:26:06 · 969 阅读 · 0 评论 -
【最小生成树】AcWing 1141. 局域网-题解
本题是典型的最小生成树问题,通过Kruskal算法可以高效解决。理解删除边权重和最大等价于保留边权重和最小使用并查集高效判断连通性正确处理边的排序和遍历顺序这种解法简洁高效,适合处理中等规模的图论问题。原创 2025-04-02 10:46:19 · 278 阅读 · 0 评论 -
AcWing 1140. 最短网络(最小生成树问题)
本题是典型的最小生成树问题,使用Prim算法可以高效解决。算法核心思想是"贪心",每次选择当前最优的边加入生成树。对于稠密图(边数接近完全图),Prim算法(尤其是这种邻接矩阵实现)是一个不错的选择。原创 2025-04-01 20:06:32 · 371 阅读 · 0 评论 -
算法:高精度减法C++
高精度减法是处理大数运算的基础算法之一,核心在于模拟手工减法的过程,正确处理借位和负数情况。这道题目考察了对数组操作、边界条件处理的能力,是学习高精度算法的经典练习题。通过这道题目,我们可以掌握大数运算的基本思想,为后续更复杂的高精度运算打下基础。原创 2025-03-31 12:32:12 · 356 阅读 · 0 评论 -
算法:高精度加法C++
高精度加法是处理大数运算的基础算法,核心思想是模拟手工加法过程。通过逆序存储数字、逐位相加并处理进位,可以有效地解决大数相加的问题。这个算法是许多高精度运算(如减法、乘法等)的基础,掌握它对后续学习其他高精度算法很有帮助。原创 2025-03-31 12:31:00 · 565 阅读 · 0 评论 -
单调栈算法模板题
单调栈是解决"第一个比当前元素大/小"这类问题的有效工具。本题通过维护一个单调递增栈,保证了每个元素都能在O(1)均摊时间内找到左边第一个比它小的数。关键在于理解为什么可以安全地弹出那些不会影响后续结果的元素,从而保持栈的单调性。这种算法思想在很多场景下都有应用,比如计算直方图的最大矩形面积、求解滑动窗口最大值等问题。掌握单调栈的使用可以大大提高解决这类问题的效率。原创 2025-03-31 09:27:38 · 459 阅读 · 0 评论