
入门算法
文章平均质量分 95
讲解信息学奥赛所考的算法知识点,并附有例题
蓝胖子教编程
蓝胖子编程教育,是一家面向全国青少年(包括:小学、初中、高中)的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划。
目前线下教学地点:湖南衡阳
关注微信公众号:蓝胖子教编程
需要的家长欢迎私聊!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【归纳】C++入门算法模版总结(超级详细!!!)(包括高精度,排序,枚举,二分,搜索,动态规划等)
本文针对有一定算法基础的选手制作,收录了大部分算法的模板,详细解说可以点进去我提供的链接了解。或者进入我的给一点支持! 本人也是一名新手,如果这篇文章有不严谨的地方或者不懂的地方可以在评论区留言,我会为你们一一解答的。 详见高精度算法解析和高精度赛场用模板。 目前没有关于高精度减法和除法的解析,之后会为大家补上。1.1.2.高精度减法1.1.3.高精度乘法1.1.4.高精度除法和取模 敬请期待。 在这里,我们通过分装一个结构体实现存储高精度数字。 在比赛中,原创 2025-07-04 16:14:33 · 957 阅读 · 0 评论 -
算法相关概念讲解和时间复杂度,空间复杂度的简单分析
在编写程序时,我们通常会使用估算的方法来计算某个算法的时间复杂度。有的时候,为了严谨,也会使用数学公式进行推导。在编写程序时,我们要根据题目给出的数据范围,合理编写不同时间复杂度的程序。下表提供了常见复杂度与数据范围。复杂度常见范围冒险范围OnO(n)On10710^710710810^8108OnlognO(n\log n)Onlogn3∗1053*10^53∗10510610^6106Onlog2nOn。原创 2024-08-27 20:38:08 · 930 阅读 · 0 评论 -
【算法讲解】模拟算法介绍和题目推荐
在现实生活中,计算机很难直接去解决实际问题,但是如果把实际问题建模成数学问题,就会大大地方便计算机来“理解”和“解决”。有一些题目并不需要太复杂的思路,而只要根据题目的介绍,根据一定的时间,逻辑顺序模拟题目的“指令”就行了。但这类题目有时会有大量的细节需要注意。所以完成模拟题时,需要有足够的耐心。千万不要做到一半就破防了接下来就会介绍一道简单的模拟题目。原创 2024-08-09 20:32:45 · 783 阅读 · 0 评论 -
高精度算法解析和高精度赛场用模板(附C++代码实现)
高精度算法,又称数值处理算法。意在通过数组模拟较大整数的存储和使用。本篇文章就会给大家介绍赛场上使用的精简版高精度算法模版。首先定义一个高精度结构体。用数组a储存这个数,用变量len储存这个数的长度。MAXN代表数组a的最大长度。1010。原创 2024-08-10 11:35:39 · 782 阅读 · 0 评论 -
【算法讲解】排序算法介绍和sort函数精讲
在现实生活中,经常需要对事物或信息进行排序。排序是什么呢?排序就是把无序的序列转变成有序的。排序之后,我们就可以通过O1O(1)O1的时间复杂度查询。排序算法又分为比较排序和非比较排序。下表为大家提供了常见的排序方法和复杂度以及备注。后面我也会进行逐一讲解。常见的比较排序方法名称平均时间复杂度最坏时间复杂度空间复杂度是否稳定备注冒泡排序On2O(n^2)On2On2O(n^2)On2O1O(1)O1✔无选择排序On2O(n^2)On2。原创 2024-08-16 16:00:10 · 1201 阅读 · 0 评论 -
计数排序讲解(附C++代码实现)
平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。为值域,即要排序的数字最大是多少),访问某个数有多少快等。小A的班上只有5个人,他们的成绩分别是5分,2分,3分,5分,4分。这道题我们可以直接模拟每个投票箱,已达到排序的效果,具体原理不再赘述。,这也是计数排序名称的由来。原创 2024-08-17 11:23:50 · 962 阅读 · 0 评论 -
冒泡排序讲解和优化以及(附C++代码实现)
在上一篇文章中,我给大家介绍了计数排序。计数排序虽然快,可也有许多限制。而冒泡排序就能解决这些问题。冒泡排序的基本思想是,每次比较两个相邻的元素, 如果他们的顺序错误(比如按从小到大排列时它们是从大到小排列的)就把他们交换过来。橙色的\color{orange}{橙色的}橙色的柱子代表已有序,即已经归位到它的位置上。绿色的\color{green}{绿色的}绿色的柱子代表目前遍历到的柱子。比如:定义一个数组将它从小到大排序。第一趟排序前:第一次排序:9和4比较,9大于4,交换位置。4。原创 2024-08-18 16:36:49 · 1017 阅读 · 0 评论 -
选择排序、插入排序讲解(附C++代码实现)
本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。我们需要做的就像打牌一样,将无序序列中的第一个数取出来,通过比较将它放在有序序列中一个合适的位置。需要注意的是:序列的第一个数默认为有序序列的第一个数,重复执行直到无序序列没有数就可以了。拿4和7比较,4比7小,跳出循环,第二趟排序结束,将基准数归位。拿7和8比较,7比8小,跳出循环,第三趟排序结束,将基准数归位。原创 2024-08-19 23:14:19 · 917 阅读 · 0 评论 -
快速排序介绍和【题解】【洛谷P1177】——【模板】排序(附C++代码实现)
冒泡排序虽然好,可是太浪费时间了,计数排序虽快,但是太浪费空间了。那有没有两者兼得的方法呢?当然有,那就是快速排序。快速排序是基于分治的一种排序算法。其核心就是找基准数(参照数)。将小于基准数的数放到基准数左边,大于基准数的数放到基准数右边,再递归分别处理左右两个区间。按照上面的方式,让我们来排序数组吧。为了方便,我们就将第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的放在6的左边,类似下面这种排列3 1 2 5 469 7 10 8。原创 2024-08-20 15:40:03 · 1259 阅读 · 0 评论 -
【算法讲解】枚举算法介绍和题目推荐
枚举算法,只在有限的时间内不重复,不遗漏的枚举所有可能的情况。因为其思路过于简单直接,所以也被称为暴力(Brute-Force)算法。在写题的时候,验证复杂的程序的正确性,可写功能一致的暴力对照程序,并构造小规模输入数据,比较二者输出。这一过程称作对拍,在赛场上是非常实用的查错技巧。因为思路过于简单,所以枚举算法的时间复杂度一般都较高。所以我们就需要进行“剪枝”,即减少不必要的枚举情况或状态。有时也会使用数学,更改枚举的对象来进行优化。原创 2024-08-28 15:00:05 · 1183 阅读 · 0 评论 -
【算法讲解】递推算法和递归思想介绍和题目推荐
有些目标是宏大的,比如如果你想找到一个好工作,需要先把面试通过。要把面试通过,就需要在大学努力学习。如果想听懂大学的课,就需要先听懂中学的课。想要听懂中学的课,又需要在小学好好听讲……在小学好好听讲->听懂中学的课->在大学努力学习->通过面试->找到好工作像这样,将一个很大的任务分解成规模小一些的子任务,子任务分成更小的子任务,直到遇到初始条件整理归纳解决大任务就是递推和递归(分治)思想。原创 2024-12-14 13:12:14 · 964 阅读 · 0 评论 -
【算法讲解】贪心算法介绍和题目推荐
贪心算法(greedy algorithm,又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键在于贪心策略的选择。这是百度对贪心的解释。想要使用贪心算法,必须具备无后效性的特征。这点可以在之后的做题中体现出来。局部最优解是什么呢?顾名思义,就是某种情况下的最优解。贪心策略,即对问题求解的策略(方法),这两个概念现在看有点晦涩难懂,需要在后续的做题中加深理解。原创 2024-12-15 16:57:13 · 1438 阅读 · 0 评论 -
【贪心延伸】【特殊二叉树】哈夫曼树和哈夫曼编码
本文内容相对初学者来说较难,有一些概念还没学。可以等读者学完二叉树和二叉堆之后再返回来学习本章内容。给定nnn个权值作为nnn个叶子结点构造一棵二叉树,使该树的带权路径长度达到最小,则这样的树被称为哈夫曼树HuffmantreeHuffmantree),也称为最优二叉树。从根节点到某叶子结点经过的边的数量称为该叶子结点的路径长度每个叶子结点的路径长度与叶子结点权值之积的和称为树的带权路径长度WeightedPathLeng。原创 2025-06-01 14:05:16 · 1029 阅读 · 0 评论 -
【算法讲解】二分算法介绍和题目推荐
二分法是一种数值计算和问题求解的算法,其基本思想是将问题分成两部分,然后选择一部分继续求解,如此重复直到找到解或者满足特定条件为止。使用二分法,可以快速的定位你想要的数据(解)。例如翻字典查找单词。字典中的单词都是按照字典序进行排序的,比如。如果要找一个单词,就需要将字典从中间翻开,然后将这面单词跟你想要找的单词比较。如果字典序大了就往前翻,字典序小了就往后翻直到找到目标单词为止。这就是运用了二分法的一个经典例子。下面将会介绍如何使用二分法编程解决问题。原创 2024-12-28 13:03:42 · 914 阅读 · 0 评论 -
【算法讲解】基础搜索算法介绍和题目推荐(全网最详细!!!看完这一篇就够了)
搜索算法是利用计算机的高性能来有目的地穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。搜索的本质上是“优雅的暴力枚举”,但是其算法特性决定了效率比直接的枚举答案要高,因为搜索可以跳过一些无效状态,降低问题规模。在算法竞赛中,如果选手无法找到一种高效求解的方法(如贪心递推动态规划数学公式推导等),可以尝试使用搜索解决一些规模较小的情况。。它可以生成一个序列的下一个排序顺序。我们来思考一个简单的问题:输出一个序列的全排列。例如输入1 2 31 2 31 3 22 1 3。原创 2025-04-13 14:46:25 · 967 阅读 · 0 评论 -
【动态规划】【背包】01背包问题模型讲解和【题解】【洛谷P1048】—— [NOIP2005 普及组] 采药(附C++代码实现)
01背包模型讲解。原创 2024-09-03 01:00:00 · 1129 阅读 · 0 评论 -
【动态规划】【背包】分组背包模型讲解和【题解】【洛谷P1757】——通天之分组背包(附C++代码实现)
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少。当增加一个物品的选项的时候,至少前面的。,表示物品的重量,利用价值,所属组数。一个数,最大的利用价值。原创 2024-11-17 13:19:54 · 827 阅读 · 0 评论 -
【动态规划】【背包】完全背包模型讲解和【题解】【洛谷P1616】——疯狂的采药(附C++代码实现)
医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同种类的草药,采每一种都需要一些时间,每一种也有它自身的价值。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。输出一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。原创 2024-11-17 17:03:32 · 981 阅读 · 0 评论 -
【动态规划】【背包】多重背包模型讲解(附C++代码实现)
平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。但是这里的宝物实在是太多了,小 FF 的采集车似乎装不下那么多宝物。小 FF 希望在采集车不超载的前提下,选择一些宝物装进采集车,使得它们的价值和最大。输出仅一个整数,表示在采集车不超载的情况下收集的宝物的最大价值。原创 2024-12-01 12:17:50 · 1033 阅读 · 0 评论 -
【动态规划】【背包】多重背包二进制优化(简单易懂)和【题解】——【洛谷P1776】宝物筛选
欠的债总是要还的。今天来把多重背包二进制优化补完。建议先食用【动态规划】【背包】多重背包模型讲解(附C++代码实现)原创 2025-07-03 19:28:58 · 574 阅读 · 0 评论 -
动态规划最长上升子序列问题讲解和【题解】【洛谷B3637】——最长上升子序列(附C++代码实现)
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。这是一道经典的动态规划例题,可以直接采用动态规划五步走。最长上升子序列问题,就是求出一个序列中这样的子序列的。可以尝试自己编写程序。的正整数组成的序列。结尾的最长子序列的长度。原创 2024-10-04 13:51:32 · 1740 阅读 · 0 评论 -
动态规划最大子段和讲解和【题解】【洛谷P1115】——最大子段和(附C++代码实现)
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。此题还有许多的做法,例如前缀和,还有分治。然后是状态转移方程,这里运用了一点贪心的思想。,选出其中连续且非空的一段使得这段和最大。,就直接赋值,否则取上前面的数。原创 2024-10-13 14:12:22 · 802 阅读 · 0 评论 -
【算法讲解】【倍增法的简单应用】——快速幂
介绍<cmath>库中一个实用的函数——pow(double,double)和快速幂的实现原创 2025-04-13 14:49:04 · 833 阅读 · 0 评论