
洛谷试题题解
文章平均质量分 94
theSerein
路漫漫其修远兮,吾将上下而求索。
展开
-
【洛谷】P1404 平均数
给一个长度为n的数列,我们需要找出该数列的一个子串,使得子串平均数最大化,并且子串长度≥m。原创 2023-05-19 19:15:38 · 1056 阅读 · 0 评论 -
【洛谷】P1631 序列合并
如果你足够敏感,你应该会立刻想到一个数据结构——堆。堆是一种建立为O(n)级、插入和删除都为O(logn)级的数据结构。显然,在面对N×N个数据时,用他们直接建立规格为 N×N 的堆依然有可能超时(此时的时间复杂度为 O(N^2)),因此需考虑别的方法。试想,我们能否能利用堆的这种具有快速修改能力的数据结构来动态构建一个长度为 N 的数据结构,并通过某种较为快速的取值方式对N×N个数据进行快速扫描并取值以更新该数据结构。为此,引入偏序集。原创 2023-04-18 17:36:37 · 1269 阅读 · 2 评论 -
【洛谷】P1242 新汉诺塔
汉诺塔问题是理解分治算法最经典的一道题。根据分治算法的思想,第一步我们必须对原问题进行分解。在此之前,对大家进行一个提问:把大象装进冰箱需要几步?答案是:三步。打开冰箱门、把大象装进去、关闭冰箱门。现在我要告诉你,求解汉诺塔问题也是三步。根据汉诺塔游戏的机制我们知道,必须先将第n个盘子移动到C杆上。但如果直接将第n个盘子移动到目标位置又是不行的,因为在这第n个盘子前还有n-1个盘子。此时,我们可以假设有一个函数function(),它可以帮我们将前面n-1个盘子移动到除目标位置以及起始位置外的那个杆子原创 2022-06-29 18:08:54 · 1561 阅读 · 3 评论 -
【洛谷】 P1115 最大子段和(贪心)
在寻找最大子段时,我们当然可以通过枚举来寻找,即维护一个长度为N的前缀和数组,然后再依次比较由该前缀和计算出的子段序列总和,并输出最大值,但是那样显然是极度耗时的(并且有可能会出现变量溢出的现象)。此时,我们可以用一个临时的前缀和变量sum来记录当前某序列的总和。对于任何子段而言,如果要使得当前子段在向后延申的过程中保持其总和递增,那么对于其后的任意输入值而言,它都应该是正数,这样必然能够保证当前子段和总和是向递增方向发展的。原创 2022-03-21 23:08:24 · 3491 阅读 · 2 评论 -
【算法与数据结构】—— 动态规划之背包问题
背包问题分为多种,其中最常见的主要是三类:01背包、完全背包、多重背包。这里面最经典的是01背包问题,它基本上已经成为了事实上的动态规划入门级必学算法。下面,我们将对上述的三类背包问题逐个分析。原创 2020-03-15 20:28:50 · 27057 阅读 · 21 评论 -
【算法与数据结构】—— 大数运算
我们知道,在数学中,数值的大小是没有上限的,但是在计算机中,由于字长的限制,计算机所能表示的范围是有限的,当我们对比较小的数进行运算时,如:1234 + 5678,这样的数值并没有超出计算机的表示范围,所以可以运算。但是当我们在实际的应用中进行大量的数据处理时,会发现参与运算的数往往超过计算机的基本数据类型的表示范围,比如说,在天文学上,如果一个星球距离我们为 100 万光年,那么我们将其化简为公里,或者是米的时候,我们会发现这是一个很大的数。这样计算机将无法对其进行直接计算。可能我们认为实际应用中的大数原创 2022-01-15 17:39:55 · 3138 阅读 · 4 评论 -
【蓝桥杯】 算法训练 数字三角形
在下面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。 三角形的行数大于 1 小于等于 100,数字为 0–99。原创 2020-07-18 16:49:21 · 6744 阅读 · 10 评论 -
【洛谷】 P1240 诸侯安置(递推)
对于本题而言,搜索算法是很不现实的。因为在用搜索的方式去枚举某个国土的具体分配方案时,递归的层次将取决于k的取值。而我们知道,一个递归算法的递归树如果超过了50层,往往会超时。因此在本题k最大会取到2 ╳ 100 - 2 = 198的情况下,搜索算法是很难完成任务的。另一方面,对于搜索算法枚举出的国土分配方案来说,我们还需要去制定“诸侯们是否会打架?”这个规则,这无疑也会带来一些开销。因此求解本题最合适的方案最终落到了DP的头上。原创 2019-08-27 21:47:54 · 1045 阅读 · 0 评论