- 博客(40)
- 收藏
- 关注
原创 P1063 [NOIP 2006 提高组] 能量项链
设dp[i][j]表示从第i颗珠子到第j颗珠子合并后释放的最大能量值。cpp// 定义最大数组大小int n;cin >> n;// 存储珠子标记的数组// 动态规划数组MAXN设为210是因为环形处理需要将原数组复制一份,所以最大需要2n的空间。bead数组存储每个珠子的标记,dp数组用于存储子问题的解。bead[i]:合并后整个区间的头标记(第一颗珠子的头标记)bead[k+1]:分割点处珠子的尾标记,也是合并时的中间标记bead[j+1]:合并后整个区间的尾标记(最后一颗珠子的尾标记)
2025-09-27 21:04:11
976
原创 P1053 [NOIP 2005 提高组] 篝火晚会
本题通过排列的循环分解,巧妙地计算了最小交换次数。关键在于:理解排列的循环结构掌握位置映射的建立方法实现高效的循环检测算法这种基于循环分解的方法不仅适用于本题,也是解决许多排列相关问题的通用思路。
2025-08-09 17:15:35
1005
原创 洛谷P1052 [NOIP 2005 提高组] 过河 题解
这道题目通过动态规划和路径压缩的技巧,有效地解决了青蛙过河问题。关键在于如何将原始问题转化为适合动态规划的形式,并通过优化减少计算量。理解状态转移和路径压缩的原理是解决此类问题的关键。
2025-08-09 09:40:11
1243
原创 P1051 [NOIP 2005 提高组] 谁拿了最多奖学金
这道题目考察了结构体的使用、条件判断的准确性以及基本的数据处理能力。通过合理的数据组织和清晰的逻辑划分,我们可以高效地解决这个问题。关键在于仔细阅读题目要求,准确实现每种奖学金的计算条件,并注意边界情况的处理。通过本题的练习,我们巩固了以下知识点:结构体的定义和使用多重条件判断最大值跟踪累加求和输入输出处理希望这篇题解能够帮助你更好地理解和解决这个问题!
2025-08-07 18:12:43
672
原创 P1026 [NOIP 2001 提高组] 统计单词个数
本题通过动态规划有效解决了字符串分割优化问题,关键点在于:合理设计dp状态表示预处理子串单词数加速计算正确处理状态转移方程代码实现清晰高效,展示了动态规划在字符串处理中的典型应用。该解法可以扩展到类似的分段优化问题中。
2025-08-05 17:07:35
841
原创 洛谷 P1631 序列合并
本题通过优先队列和巧妙的剪枝策略,高效地解决了序列合并问题。关键点在于:利用序列已排序的特性进行优化使用最小堆维护候选解通过数学分析减少不必要的计算代码实现简洁高效,时间复杂度优秀,适合处理大规模数据。这个解法展示了如何将数学洞察与数据结构相结合,解决复杂的算法问题。
2025-08-05 16:09:08
841
原创 洛谷 P1016 [NOIP 1999 提高组] 旅行家的预算
本题是NOIP1999提高组的经典题目,考察贪心算法的应用。题目描述了一位旅行家需要在若干个加油站之间规划加油策略,以最小的花费完成整个旅程。汽车油箱有容量限制,每个加油站油价不同,我们需要找到最优的加油方案。本题通过贪心算法有效解决了加油策略问题,关键在于:合理处理起点和终点在每个加油站做出局部最优选择精确计算油量和花费处理好各种边界情况。
2025-07-25 18:31:08
926
原创 P1013 [NOIP 1998 提高组] 进制位
table:存储输入的加法表base:计算得出的进制数letters:存储所有出现的字母charToNum:字母到数字的映射字典进制转换:熟悉不同进制间的转换方法逻辑推理:从有限信息中推导出变量关系编程实现:将逻辑推理过程转化为代码细节处理:注意边界条件和特殊情况解题关键在于:正确识别进制与表格大小的关系从简单的加法关系入手建立初始映射通过验证确保解的准确性通过这道题,我们学习了如何分析特殊形式的加法表,并将其与进制转换知识相结合,这对理解数字表示和运算的本质有很大帮助。
2025-07-24 22:27:40
855
原创 C++图论全面解析:从基础概念到算法实践
图(Graph)是由顶点(Vertex)和边(Edge)组成的非线性数据结构,用于表示对象之间的复杂关系。在计算机科学中,图被广泛应用于社交网络、交通系统、网络拓扑等场景。顶点(Node/Vertex):表示实体对象边(Edge):表示顶点之间的关系权重(Weight):边可以带有权值,表示关系的强度或成本。
2025-07-24 20:18:31
1049
原创 洛谷 P1019 [NOIP 2000 提高组] 单词接龙
words:存储所有单词的字符串数组。used:记录每个单词使用次数的数组。max_len:记录当前找到的最长接龙长度。n:单词的数量。这道题通过DFS系统地探索了所有可能的单词接龙组合,通过合理设计重叠计算和搜索策略,有效地找到了最优解。代码实现简洁明了,适合初学者理解和掌握DFS算法的应用。通过这道题,我们不仅学会了如何解决具体的单词接龙问题,还掌握了深度优先搜索在实际问题中的应用方法,这对于解决其他类似的组合优化问题具有重要的启发意义。
2025-07-24 18:45:09
1052
原创 洛谷 P1031 [NOIP 2002 提高组] 均分纸牌
n:纸牌的堆数。cards:一个动态数组,用于存储每堆纸牌的数量。total:所有纸牌的总数。avg:每堆纸牌应该达到的平均数。moves:记录移动的次数。这道题通过贪心算法高效地解决了纸牌均分的问题。关键在于理解每次移动的最优选择是如何影响全局的,以及如何通过简单的差值传递来实现最少移动次数。代码实现简洁明了,适合初学者理解和掌握贪心算法的基本应用。通过这道题,我们不仅学会了如何解决具体的纸牌移动问题,还掌握了贪心算法在实际问题中的应用方法,这对于解决其他类似的最优化问题具有重要的启发意义。
2025-07-24 16:13:17
1125
原创 P1040 [NOIP 2003 提高组] 加分二叉树
dp[i][j]:中序遍历i~j子树的最高加分root[i][j]:记录最优解的根节点位置核心技巧区间DP的经典应用树结构重建方法同类问题最优二叉搜索树矩阵链乘法优化方向四边形不等式优化(可降至O(n²))记忆化搜索实现注意事项空子树得分为1的特殊处理根节点数组的同步更新洛谷P1273 有线电视网(树形DP)LeetCode 96.不同的二叉搜索树尝试输出所有可能的最优解。
2025-07-23 21:24:42
609
原创 P1060 [NOIP 2006 普及组] 开心的金明
设dp[j]表示使用j元能获得的最大价值总和核心收获掌握01背包的空间优化技巧理解价值计算的灵活变形同类问题洛谷P1048 采药(标准01背包)洛谷P1164 小A点菜(求方案数)优化方向当N极大时可用贪心近似物品可分割时用分数背包易错点忘记逆序更新导致错误价值计算遗漏重要度系数该解法完美展示了如何将实际问题抽象为背包模型。尝试输出具体选择的物品修改为完全背包问题解法研究二进制优化的多重背包实现。
2025-07-23 21:17:43
899
原创 P1049 [NOIP 2001 普及组] 装箱问题
算法对比当V较大时(nV≤1e7)适用V极大时可考虑贪心近似算法变形应用完全背包问题(正序更新)多重背包问题(二进制优化)注意事项体积上限20000,int足够确保j>=v[i]时才更新该解法是01背包问题的经典应用,通过逆向遍历完美避免了重复选择问题。建议理解后尝试洛谷P1060(开心的金明)等同类背包问题。
2025-07-23 21:12:17
434
原创 洛谷 P1020 [NOIP 1999 提高组] 导弹拦截
算法对比朴素DP适合n≤1e3优化解法适合n≤1e5变形应用最长不下降子序列(改比较条件)二维LIS问题(需排序+树状数组)推荐练习洛谷P1091 合唱队形LeetCode 300.最长递增子序列注意事项输入可能含多组数据边界条件处理(空输入等)该解法完美结合了算法理论和工程实践,通过STL的高效实现展现了C++的优雅性。建议理解后尝试手写二分查找版本以加深理解。
2025-07-23 20:59:04
570
原创 P1046 [NOIP 2005 普及组] 陶陶摘苹果
这个问题虽然简单,但很好地考察了基本的数组操作、循环和条件判断等编程基础能力,适合初学者理解和练习。
2025-07-23 20:41:07
919
原创 P1223 排队接水
有 n个人在一个水龙头前排队接水,假如每个人接水的时间为 $T_i$,请编程找出这 $n$ 个人排队的一种顺序,使得 n 个人的平均等待时间最小。第一行为一个整数 n。第二行 n个整数,第 i个整数 T_i$ 表示第 $i$ 个人的接水时间 $T_i$。输出文件有两行,第一行为一种平均时间最短的排队顺序;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。10291.901<=n<=1000,1<=t[i]<=10^6,不保证 t[i] 不重复。
2025-07-21 21:51:23
504
原创 B3637 最长上升子序列 题解
小循环,从 1 到 i−1,如果 aj 小于 ai 的话,说明这个数可以和 fi 组成上升子序列,则 fi 取 max(fi,fj+1);我们知道,1,2,3 为一个上升子序列,但是 3 后面的 4 和这个上升子序列拼接后可以组成一个更长的上升子序列。如果一个上升子序列的最大值小于一个在它后面的数,那么这个数和这个子序列可以拼成一个更长的上升子序列。所以,我们可以设计 f(i),表示以第 i 个数为结尾的最长上升子序列的长度。给定一个正整数序列,输出这个序列中最长上升子序列的长度。
2025-07-21 21:11:51
241
原创 P1115 最大子段和
给出一个长度为 n 的序列 a,选出其中连续且非空的一段使得这段和最大。第一行是一个整数,表示序列的长度 $n$。第二行有 $n$ 个整数,第 $i$ 个整数表示序列的第 $i$ 个数字 $a_i$。输出一行一个整数表示答案。输入7输出4样例 1选取 [3, 5] 子段 {3, -1, 2},其和为 4。数据规模与约定- 对于 40% 的数据,保证 n<=2*10^2。- 对于 100% 的数据,保证 1<=n<=2*10^5 , -10^4 <= a[i] <=10^4。
2025-07-21 20:39:15
209
原创 P1216 [IOI 1994] 数字三角形 Number Triangles
观察下面的数字金字塔。写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。在上面的样例中,从7 -> 3 ->8 -> 7 -> 5 的路径产生了最大权值。第一个行一个正整数 $r$,表示行的数目。后面每行为这个数字金字塔特定行包含的整数。单独的一行,包含那个可能得到的最大的和。```573 88 1 02 7 4 44 5 2 6 5``````30```【数据范围】
2025-07-21 20:12:27
288
原创 P2949 [USACO09OPEN] Work Scheduling G题解
使用优先队列(小根堆)维护当前选择的任务。遍历排序后的任务,动态调整任务集合。略 不难理解(没时间解释)按截止时间对所有任务排序。
2025-07-18 20:43:25
225
原创 B4038 [GESP202409 三级] 平衡序列
题目问,是否存在一个正整数 ii,使得序列第 11 到第 ii 个数字的总和等于第 i+1i+1 到第 nn 个数字的总和。因此,使用一重循环枚举 ii,在循环内部使用第二层循环,统计序列第 1∼i1∼i 个数字之和,以及第 (i+1)∼n(i+1)∼n 个数字之和,判断是否相等。这样做的结果虽然是正确的,但是无法通过本题。这是因为,循环枚举的时间复杂度是 O(n2)O(n2),而测试数据有 tt 组,合计为 O(tn2)O(tn2),在 t=100t=100,n=104n=104 时会超时。
2024-11-18 20:54:18
1198
原创 B4039 [GESP202409 三级] 回文拼接 题解
下一个问题是判断回文。根据定义,回文字符串指的是从前往后读和从后往前读是一样的字符串。假设字符串 aa 是要判断是否回文的字符串,长度为 ii。流程就是:判断 a0a0 和 ai−1ai−1 是否相同,判断 a1a1 和 ai−2ai−2 是否相同,判断 a2a2 和 ai−3ai−3 是否相同,以此类推。题目问,每个字符串是否由两个长度至少为 22 的回文串前后拼接而成。先简化问题:如何获取这两个字符串呢(先不考虑是不是回文)?可以枚举开头的字符串长度 ii,这样便可以知获得这两个字符串了。
2024-11-18 20:50:28
1459
原创 [NOIP2011 提高组] 铺地毯
接下来的 nn 行中,第 i+1i+1 行表示编号 ii 的地毯的信息,包含四个整数 a,b,g,ka,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标 (a,b)(a,b) 以及地毯在 xx 轴和 yy 轴方向的长度。如下图,11 号地毯用实线表示,22 号地毯用虚线表示,33 号用双实线表示,覆盖点 (2,2)(2,2) 的最上面一张地毯是 33 号地毯。第 n+2n+2 行包含两个整数 xx 和 yy,表示所求的地面的点的坐标 (x,y)(x,y)。输入共 n+2n+2 行。
2024-11-04 19:16:04
816
原创 杨辉三角(c++)
这一数学概念最初由北宋的在11世纪提出,并在杨辉的研究中得到了进一步的发展和阐述。杨辉三角实际上是在三角形中的一种几何排列,展示了数学中的对称美和规律性。杨辉三角不仅展示了数学的规律性和简洁美,还在历史上体现了中国数学家的智慧和贡献。尽管帕斯卡在1654年独立发现了这一规律,但杨辉的发现早了393年,显示了古代中国在数学领域的卓越成就。
2024-10-09 17:53:55
1527
原创 排队打水问题(贪心算法)c++
有n个人排队到 r 个水龙头去打水,他们装满水桶的时间 t1, t2, …,tn 为整数且各不相等,应如何安排他们的打水顺序才能使他们花费的总时间最少?每个人打水的时间 = 排队的时间 + 实际打水的时间,本题假设一个人打好水,排在他后面的人接着打水的这个切换过程不消耗时间。比如,有2个人A和B,他们打水的时间分别是3和2,只有1个水龙头,这时,如果A先打水,B后打水,那么A和B打水的时间分别为3、3+2(B排队3分钟)。因此,所有人打水的总时间就是每个人的打水时间及每个人的排队时间的总和。
2024-10-07 18:22:05
1805
原创 [USACO1.5] 八皇后 Checker Challenge ( c++ )
检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子,如下例,就是一种正确的布局。上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下:行号 1 2 3 4 5 6列号 2 4 6 1 3 5这只是跳棋放置的一个解。请写一个程序找出所有跳棋放置的解,并把它们以上面的序列方法输出。解按字典顺序排列,请输出前3个解,最后一行是解的总个数。
2024-10-07 18:07:49
492
原创 【NOIP2014 普及组c++复赛】螺旋矩阵
一个 n 行 n 列的螺旋矩阵可由如下方法生成:从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入 1, 2, 3, ... , n2,便构成了一个螺旋矩阵。下图是一个 n = 4 时的螺旋矩阵。现给出矩阵大小 n 以及 i 和 j,请你求出该矩阵中第 i 行第 j 列的数是多少。输入格式。
2024-10-06 16:47:11
594
原创 【NOIP2005 普及组c++】校门外的树
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,…,L都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
2024-10-06 11:51:26
634
原创 【NOIP2014 普及组c++】珠心算测验
通过遍历集合中的每一对数,计算它们的和,并检查这个和是否在集合中存在,可以有效地解决这个问题。使用 数组 z[ ] 来存储已经找到的和,可以避免重复计算,提高效率。
2024-10-06 11:08:39
895
原创 递归(-9999基础教学)
这个故事有个特点,在故事中提到同样的故事。而这就是递归的了函数就像一个故事,函数中调用自己就是好了回到编程领域,递归是一种编程技术,它允许函数调用自身来解决问题。递归通常用于解决可以被分解为相同类型的较小问题的问题。递归的一个经典例子是计算阶乘。
2024-10-05 20:23:06
673
原创 汉诺塔(递归)c++
开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片: 如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C 此外,汉诺塔问题也是程序设计中的经典递归问题。一个整数N,表示A柱上有N个碟子。
2024-10-05 18:27:41
1447
原创 过河卒(递归)c++
本题关键在于判断终点,执行过程(向下与向右),包括一些细节(为x,y设置边界,利用abs优化)重在理解递归不断调用函数(在本题此过程有如1分2的树形图),直至达到终点再返回所以,你会了吗,还不会的话。
2024-10-05 17:39:47
609
算法竞赛暴力求解法详解:枚举、排列、子集生成及回溯法在竞赛编程中的应用暴力求解法
2025-07-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1