自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

算法是门艺术

加油,少年!

  • 博客(129)
  • 收藏
  • 关注

原创 P13016 [GESP202506 六级] 最大因数

本文针对题目P13016提出了一种基于数论的高效解法,避免了传统树算法在处理1e9规模节点时的复杂度问题。核心思路是将节点父节点关系转化为数学问题:每个节点k的父节点为其最大真因数(即k除以最小质因数)。通过双指针模拟最近公共祖先过程,较大节点不断向上跳跃直至相遇,累计步数即为距离。该方法将时间复杂度优化至对数级别,完美适应大规模数据。代码实现简洁高效,结合数论性质和贪心策略,解决了传统算法无法处理超大树结构的问题。

2026-06-10 18:09:02 328

原创 P13015 [GESP202506 六级] 学习小组

这篇文章解析了一道关于分组优化问题的动态规划解法。题目要求将n名同学分组,使得总讨论积极度最大。作者将其建模为完全背包问题:背包容量为总人数n,物品是不同人数的小组(重量为小组人数,价值为积极度)。通过定义dp[i]表示i人分组的最大积极度,利用状态转移方程dp[i] = max(dp[i], dp[i-j] + a[j]),在O(n²)时间内解决问题。文章详细解释了代码结构、IO优化和核心算法逻辑,强调动态规划如何将复杂的组合问题转化为高效求解。最终输出dp[n]即为所求最优解。

2026-06-10 17:57:48 560

原创 P11963 [GESP202503 六级] 环线

这篇文章介绍了解决环形数组最大子段和问题的两种方法。第一种方法通过数学推导,将问题分解为求普通数组的最大子段和与总和减去最小子段和两种情况,利用Kadane算法在O(n)时间内同时计算最大和最小子段和,并处理全负数的边界情况。第二种方法采用拆环为链技术,将环形数组扩展为两倍长度的线性数组,结合前缀和与单调队列滑动窗口来寻找最大子段和。两种方法都能高效解决该问题,时间复杂度均为O(n),适用于处理车站数量较大的情况。文章详细解释了算法逻辑、代码实现和边界处理,为类似环形数组问题提供了通用解决方案。

2026-06-09 17:41:34 235

原创 P11962 [GESP202503 六级] 树上漫步

这篇文章讲解了一道关于树结构的算法题,核心思路是将树视为二分图进行染色处理。题目要求计算每个节点通过偶数步能到达的节点总数。作者通过分析树的特性,发现这等价于统计与当前节点同色的节点数。解题过程包括:构建树的邻接表,使用DFS进行二分图染色(相邻节点颜色不同),统计两种颜色的节点总数,最后直接输出每个节点对应颜色的总数。这种方法将时间复杂度从O(N²)优化到O(N),利用树的二分图性质实现了高效求解。代码实现包括输入处理、DFS染色、结果统计和输出四个主要部分,通过颜色标记和全局计数避免了重复计算。

2026-06-09 16:33:23 492

原创 P2947 [USACO09MAR] Look Up S

本文介绍了使用单调栈高效解决奶牛仰望问题的算法。题目要求在N≤10^5规模的奶牛队列中,为每头奶牛找到右侧第一个比它高的奶牛编号,暴力解法O(N²)会超时。算法核心是逆序遍历结合单调递减栈:从右向左处理,维护栈内元素严格单调递减,通过剔除比当前矮的奶牛来保证栈顶即为最近仰望对象。每个元素仅入栈出栈一次,时间复杂度优化至O(N)。代码实现包括数据输入、核心栈处理逻辑和结果输出,并采用IO优化提升速度。该算法有效解决了大规模数据下的高效查询问题。

2026-06-08 21:01:14 219

原创 P11376 [GESP202412 六级] 运送物资

这篇题解介绍了一个关于货车运输路径优化的算法问题。通过数学公式拆解,将总路程分为固定成本和变动成本两部分,其中固定成本与站点位置无关,可以预先计算。变动成本则通过贪心策略优化:将偏向A市的货车分配到坐标较小的站点,偏向B市的货车分配到坐标较大的站点。算法使用双指针技术高效完成站点分配,最终总路程为累加结果的两倍。该方法在O(n+m)时间复杂度内解决问题,适用于大规模数据输入。

2026-06-08 20:53:35 527

原创 P11375 [GESP202412 六级] 树上游走

本文介绍了一种解决二叉树模拟中整数溢出问题的方法。通过引入"虚层"机制,在节点编号超过1e12时,不实际计算具体编号,而是记录超出层数。当向上移动时优先减少虚层,确保最终结果在安全范围内。该方法有效避免了传统模拟过程中因指数增长导致的溢出问题,适用于大规模移动指令下的节点跟踪。文章详细解释了代码各模块的功能,并总结了核心逻辑和解决的关键问题。

2026-06-04 22:45:00 315

原创 P11247 [GESP202409 六级] 算法学习

这是一道关于算法知识点学习和题目安排的贪心算法题解。核心思路分为两部分:首先对每种算法进行局部贪心,优先选择高分题目以最少题数达到目标掌握程度;然后全局考虑题目排列,避免连续学习同一知识点。当常规方法无法满足间隔条件时,通过借用其他知识点的剩余题目作为隔板,确保学习顺序合法。最终通过比较必做题数、其他题数和剩余题数之间的关系,判断是否存在可行解并计算最小总题数。

2026-06-04 18:14:39 539

原创 P10722 [GESP202406 六级] 二叉树

本文介绍了一个高效的树形结构问题解决方案,涉及节点颜色翻转操作。通过分析翻转的奇偶性本质和利用深度优先搜索(DFS)进行状态传递,算法将时间复杂度优化为O(N+Q)。核心思路包括:1) 用奇偶性记录节点被操作的次数;2) 通过邻接表存储树结构;3) 在DFS过程中维护累计翻转次数,并根据奇偶性确定最终颜色。该方法避免了暴力更新子树,显著提高了处理大规模数据时的效率。代码实现中还包括输入输出优化技巧,确保在10^5数据量下仍能高效运行。

2026-06-03 11:15:00 578

原创 P10721 [GESP202406 六级] 计算得分

这篇文章介绍了一个解决字符串最大得分问题的动态规划算法。题目要求在不重叠的子串中,找出由k个连续"abc"组成的子串,使得其得分总和最大。 核心思路: 使用线性动态规划(DP),定义dp[i]表示处理前i个字符时的最大得分。 对于每个字符位置i,有两种选择: 不选当前字符,继承dp[i-1] 以i结尾,尝试匹配1到k个连续的"abc",若匹配成功则更新得分 利用连续性剪枝优化:一旦发现当前k个"abc"不匹配,立即终止内层循环 算法特点: 时间复杂

2026-06-03 09:00:00 491

原创 P10377 [GESP202403 六级] 好斗的牛

摘要:本文解析了洛谷P10377题,通过深度优先搜索(DFS)生成全排列,计算奶牛排列所需的最小牛棚数量。每头牛的攻击范围转化为安全距离,相邻牛之间的空牛棚数为两者攻击范围的较大值。代码使用回溯法枚举所有排列,并更新全局最小长度。由于n≤9,暴力搜索可行。核心知识点包括DFS回溯、贪心极值计算和状态模拟,适用于类似排列组合问题。

2026-06-02 23:50:56 234

原创 P10109 [GESP202312 六级] 工作沟通

本文介绍了一种解决公司层级管理中主持人选择问题的算法。题目要求从N名员工中找出能管理特定合作团队且编号最大的主持人。算法通过构建树结构表示管理关系,预处理员工深度,并使用DFS验证管辖范围。核心思路包括:1)将公司层级建模为树;2)预处理计算员工深度;3)对每个查询,先确定参与者最高职位,再倒序检查潜在主持人。该算法采用剪枝策略,时间复杂度为O(Q*N^2),适用于N≤300的中等规模数据。代码实现包含树构建、深度计算、DFS遍历和条件检查等关键步骤,体现了图论思想在实际问题中的应用。

2026-06-02 23:18:57 461

原创 P3374 【模板】树状数组 1

这篇文章介绍了如何使用树状数组(BIT)高效解决区间求和与单点修改问题。文章首先分析了暴力解法的时间复杂度问题,然后详细讲解了树状数组的核心原理和优势,特别是通过lowbit操作实现O(logN)时间复杂度的查询和修改。代码部分包含了树状数组的三个关键函数:lowbit计算二进制最低位1的值,sum实现前缀和查询,add完成单点修改。最后通过主函数展示了如何初始化树状数组并处理两种操作:单点加值和区间求和。该解法特别适合处理大规模数据的动态区间查询问题。

2026-04-30 19:07:02 677

原创 P10262 [GESP样题 六级] 亲朋数

本文介绍了如何高效计算数字串中能被给定整数p整除的连续子串(亲朋数)数量。针对大长度数字串(如1e6位),传统暴力枚举法会超时。作者提出利用动态规划结合同余定理的O(L×p)解法:通过滚动数组记录以每个位置结尾的子串余数分布,利用模运算性质(j*10+num)%p进行状态转移。代码实现中,last数组存储上一位置的余数分布,dp数组计算当前位置状态,最后累加各位置余数为0的子串数。该方案避免了直接计算大数,显著提升了效率。

2026-04-30 08:15:00 524

原创 P1024 [NOIP 2001 提高组] 一元三次方程求解

这篇文章介绍了一个求解一元三次方程实根的算法。题目要求找出形如ax³+bx²+cx+d=0的方程的三个不同实根(根的范围在-100到100之间,且根间距≥1)。算法采用数值逼近方法,通过遍历整数区间[i,i+1],利用介值定理和二分法来定位根的位置。核心思路是:当函数值在区间端点异号时,使用二分法逐步缩小范围直至找到满足精度要求的根。文章详细解析了算法设计的关键点,包括浮点数误差处理、根的去重机制以及区间覆盖策略,并解释了为何选择二分法而非其他数值方法。该算法在保证正确性的同时具有较高的效率,适合编程竞赛中

2026-04-28 22:58:56 521

原创 P1873 [COCI 2011/2012 #5] EKO / 砍树

本文解析了伐木工人问题,通过二分查找确定最大锯片高度H,使得砍伐木材总量至少为M米。核心思路是利用H与木材量的单调关系进行二分搜索,时间复杂度为O(NlogmaxH)。关键点包括:1) 无需排序直接计算木材量;2) 使用long long防止数值溢出;3) 正确设置二分边界。文章还对比了暴力枚举和前缀和优化等替代方案,指出在数据规模1e6时当前解法已足够高效。最终代码通过维护可行解ans,在二分过程中不断逼近最优H值。

2026-04-28 22:51:22 434

原创 P1102 A-B 数对

题目要求统计满足A-B=C的数对个数。本文提出一种基于排序和二分查找的高效解法,时间复杂度O(NlogN)。首先对数组排序,然后对于每个元素a[i],通过二分查找快速计算a[i]+c的出现次数(使用upper_bound和lower_bound),累加得到总方案数。关键点包括:1) 必须使用long long存储结果防止溢出;2) 排序后才能使用二分查找;3) 该方法自动处理重复元素。示例代码展示了具体实现,适用于N≤2×10⁵的大规模数据。

2026-04-27 17:52:23 473

原创 P2249 【深基13.例1】查找

这篇文章讲解了一个二分查找问题,要求在一个有序数组中查找元素第一次出现的位置。文章分析了题目要求、核心算法思路和代码实现,重点说明了如何通过二分查找的变种来高效解决"首次出现位置"问题。作者详细解释了算法的时间复杂度(O(mlogn))和边界处理,并对比了暴力解法与二分查找的效率差异,强调在数据量大的情况下必须使用二分查找。文章还指出了代码优化建议,如IO加速等,适合参加算法竞赛的读者学习参考。

2026-04-27 17:30:03 402

原创 P2722 [USACO3.1] 总分 Score Inflation

本文讨论了一个完全背包问题的动态规划解法。题目要求在给定时间限制m内,从n类无限可选的题目中选择若干道,每类题目耗时t_i、得分p_i,目标是最大化总得分。解题思路采用一维动态规划数组dp,其中dp[j]表示恰好使用j时间能获得的最大分数。通过正序遍历时间(从t到m),允许重复选择同一类题目。算法时间复杂度为O(n×m),空间复杂度为O(m)。关键点在于理解完全背包的正序更新机制,这与0-1背包的逆序更新形成对比。最后直接输出dp[m]即为不超过时间m的最大得分。

2026-04-25 17:25:54 594

原创 P1832 A+B Problem(再升级)

这是一个关于素数分解的动态规划问题。程序使用完全背包的方法计算给定整数n可以被表示为素数之和的方式数量。首先定义了一个判断素数的函数f(x),然后初始化动态规划数组dp,其中dp[0]=1作为起点。对于每个素数i,从i到n进行遍历,更新dp[j]的值为dp[j]加上dp[j-i](表示使用素数i来组成数字j的不同方式)。最终输出dp[n]即为将n表示为素数之和的所有可能方式数。

2026-04-25 17:15:55 765

原创 P2871 [USACO07DEC] Charm Bracelet S

本文介绍了一个经典的0-1背包问题解法。给定N件物品(重量w[i],价值d[i])和容量M的背包,要求在不超过背包容量的情况下,选择物品使总价值最大。采用动态规划方法,使用一维数组dp[j]表示容量j时的最大价值,通过双重循环(外层遍历物品,内层倒序遍历容量)进行状态转移。关键点在于倒序更新以避免重复选择同一物品。算法时间复杂度为O(N×M),空间复杂度O(M)。最终输出dp[m]即为最优解。

2026-04-25 17:05:47 405

原创 P2925 [USACO08DEC] Hay For Sale S

本文介绍了一个基于动态规划的0-1背包问题解决方案,用于计算在给定容量限制下能装载的最大稻草体积。程序使用布尔型数组记录可达状态,通过倒序遍历确保每捆稻草只使用一次。核心算法包括:初始化dp[0]为真,对每捆稻草进行逆向状态转移,最后从最大容量开始寻找第一个可达状态作为最优解。该方法的时间复杂度为O(H×C),空间复杂度为O(C),能够有效解决题目要求的最优化装载问题。

2026-04-25 16:56:24 512

原创 P2639 [USACO09OCT] Bessie‘s Weight Problem G

这篇文章介绍了一个经典的0-1背包问题解决方案,用于帮助Bessie在不超过每日干草摄入限制H的前提下,选择若干捆干草使得总重量最大化。文章详细解释了问题核心、输入样例解析,并提供了使用布尔型动态规划数组的C++实现代码。关键点包括:使用一维DP数组记录可达重量,倒序遍历防止重复计算,以及从H向下查找第一个可达重量作为最优解。该算法时间复杂度为O(N*H),适用于题目给定的约束条件(N≤500,H≤45000)。

2026-04-24 23:41:57 391

原创 P1877 [HAOI2012] 音量调节

题目描述了一位吉他手在演出时需要根据歌曲列表调整音量,每次可选择调高或调低指定幅度,要求最终音量最大且始终在0到maxLevel之间。解题思路采用动态规划方法,定义dp[i][v]表示第i首歌前能否达到音量v。初始状态为初始音量,每次根据前一首歌的音量进行±c_i的转移,并检查新音量是否合法。最终从高到低扫描最后一首歌的可能音量,输出最大值或-1(无解)。代码通过二维布尔数组实现状态转移,时间复杂度O(n*maxLevel)。

2026-04-24 23:27:15 515

原创 P2430 严酷的训练

这篇文章介绍了一个背包问题的变体解法。题目描述两位解题者(WKY和老王)的水平比值与解题时间成反比,需要计算WKY在规定时间内能获得的最大奖励值。解题关键在于将问题转化为标准的0-1背包问题:将每道题目视为物品,其"重量"为该题所属知识点的解题时间,"价值"为题目奖励值,背包容量为规定时间上限。通过动态规划方法,倒序更新状态数组dp[j],其中dp[j]表示在时间j内能获得的最大奖励值。最终输出在规定时间上限下的最大奖励值。算法时间复杂度为O(m*num),其中m是题

2026-04-24 23:14:58 672

原创 P1926 小书童——刷题大军

本文介绍了一个动态规划与贪心算法结合的解题方法。题目要求学生在保证作业及格的前提下,用剩余时间尽可能多地刷题。解题分为两个阶段:首先使用0-1背包算法求出获得及格分所需的最少时间(其中分数为背包容量,时间为价值),然后在剩余时间内通过贪心算法选择耗时最短的题目来最大化刷题数量。代码实现了这一思路,包括输入处理、作业背包计算和题目贪心选择等步骤。通过样例验证了算法的正确性,并讨论了关键细节处理。该方法有效解决了时间分配和任务优化问题。

2026-04-18 15:49:32 399

原创 P2347 [NOIP 1996 提高组] 砝码称重

本文介绍了一个多重背包问题的解决方案,用于计算使用不同重量的砝码(1g、2g、3g、5g、10g、20g)各若干枚时,能表示的不同正整数重量的种类数。通过将多重背包问题转化为01背包问题,使用动态规划方法求解。具体实现中,使用布尔数组dp记录可达的重量状态,并通过三层循环遍历所有可能的砝码组合。最终统计dp数组中为true的元素个数,即为可表示的不同重量数。该方法适用于总重量不超过1000的情况,时间复杂度为O(n^2),能够有效解决问题。

2026-04-18 15:42:19 552

原创 P1510 精卫填海

本文探讨了精卫填海问题的动态规划解法。题目要求选择若干木石,使其总体积≥v且总消耗体力≤c。通过转化为0-1背包问题,定义dp[j]为恰好获得体积j所需的最小体力。采用逆向遍历更新状态,最终在所有j≥v中寻找最小体力消耗。若最小值≤c则输出剩余体力,否则输出"Impossible"。代码分析展示了合理设置数组大小和初始值的技巧,并通过样例验证了算法的正确性。该解法有效解决了"最小代价达到至少目标容量"的变种背包问题。

2026-04-18 10:44:21 340

原创 P1910 L 国的战斗之间谍

这篇文章介绍了一个二维0-1背包问题的解法。题目需要从N个间谍候选人中选择若干人,在满足总伪装差不超过M和总工资不超过X的条件下,最大化能获取的资料量。每个间谍有三个属性:资料量A、伪装差B和工资C。 解法采用动态规划,定义dp[j][k]表示在总伪装差不超过j且总工资不超过k时的最大资料量。通过三层循环(遍历每个间谍,倒序遍历伪装差和工资限制)进行状态转移,更新dp数组。最终答案dp[m][x]即为在给定限制下的最优解。 该解法正确处理了双重约束条件下的0-1背包问题,通过倒序遍历避免重复选择,时间复杂度

2026-04-11 12:43:46 509

原创 P1855 榨取kkksc03

本文介绍了一个二维0-1背包问题的解法。题目要求在有限的金钱(M)和时间(T)条件下,从n个愿望中选择尽可能多的愿望,每个愿望需要消耗特定金钱和时间。采用动态规划方法,定义dp[j][k]表示不超过j元和k分钟时能完成的最大愿望数。通过三重循环(倒序枚举愿望、金钱和时间)进行状态转移,最终输出dp[M][T]即为最优解。算法时间复杂度为O(nMT),适用于资源限制条件下的最优化问题。

2026-04-11 12:35:00 348

原创 P2663 越越的组队

本文介绍了一个解决班级学生分组问题的动态规划算法。题目要求从n个学生(n为偶数)中选出恰好n/2人,使其成绩之和不超过总分一半的前提下最大化。算法采用二维0-1背包思路,定义dp[j][s]表示能否选出j人达到总分s。通过三重循环(学生、人数倒序、总分倒序)进行状态转移,最后从总分上限向下查找第一个可行解。该算法有效解决了带数量限制的背包问题,时间复杂度为O(n²·sum),适用于n≤100的规模。

2026-04-10 18:02:04 501

原创 P1060 [NOIP 2006 普及组] 开心的金明

本文介绍了一个基于0-1背包问题的动态规划解法,用于在预算限制下最大化物品价值。题目要求在不超过N元的前提下,选择若干物品,使价格与重要度的乘积总和最大。解法采用一维数组优化空间,通过倒序更新确保物品只选一次。核心思路是定义dp[j]表示花费不超过j时的最大价值,对每件物品从n到其价格倒序更新dp数组。最终答案存储在dp[n]中,表示预算内能获得的最大价值。代码简洁高效,适用于物品数量较少的情况。

2026-04-10 17:54:28 391

原创 P11246 [GESP202409 六级] 小杨和整数拆分

本文介绍了一个使用动态规划解决完全平方数最小数量问题的算法。给定正整数n,算法通过动态规划计算将其表示为完全平方数之和所需的最少个数。初始化时假设全用1组成,然后逐步优化:对于每个数字i,枚举所有可能的平方数j²≤i,通过状态转移方程dp[i]=min(dp[i],dp[i-j²]+1)寻找最优解。算法时间复杂度为O(n√n),适用于n≤1e5的情况。代码简洁高效,通过预处理和状态转移确保了结果的正确性。

2026-04-05 17:58:55 375

原创 P10376 [GESP202403 六级] 游戏

本文摘要: 该问题要求计算从初始值n出发,通过反复减去a或b,直到n≤c时的不同操作序列数量。解题采用动态规划方法,通过偏移量技巧处理负数下标,实现反向状态转移。核心思路是从n开始倒序处理,将路径数传播到n-a和n-b的位置,最终累加所有终止状态(n≤c)的路径数。代码使用dp[N+x]表示状态x,其中N=2e5+5作为偏移量,确保数组访问安全。时间复杂度O(n),空间复杂度O(n),适用于n≤2e5的情况。

2026-04-05 17:49:51 517

原创 P10108 [GESP202312 六级] 闯关游戏

摘要 本文解决了一个闯关游戏的最优路径问题,玩家需要通过选择不同跳跃步数的通道来最大化通关得分。采用动态规划方法,定义dp[i]表示到达第i关时能获得的最大总分。算法首先初始化所有位置为不可达,然后处理起点和初始跳跃情况。通过双重循环进行状态转移,考虑所有可能的跳跃路径。最终在可能通关的位置范围内寻找最大得分。该方案有效处理了游戏规则中的得分机制和通关条件,确保找到最优解。时间复杂度为O((N+M)*M),适用于题目给定的数据范围。

2026-04-05 17:41:33 608

原创 B3873 [GESP202309 六级] 小杨买饮料

这是一个解决0-1背包变种问题的C++程序。题目要求选择若干种饮料(每种最多一瓶),在总容量不低于L的前提下,使总费用最小。程序采用动态规划方法,其中dp[j]表示恰好获得j毫升容量的最小费用。关键优化是将容量上界设为L+最大单瓶容量,避免不必要的计算。算法通过倒序更新背包状态,最后在[L, MAXL]范围内寻找最小费用。若无解则输出"nosolution"。该方案有效处理了"至少满足容量L"的约束条件,同时优化了计算范围。

2026-04-02 23:35:41 563

原创 P1569 [USACO ?] Generic Cow Protests【来源请求】

本文介绍了一个动态规划算法,用于解决将连续排列的奶牛分成最多合法小组的问题。每个小组的理智度总和必须不小于零。算法使用前缀和优化来计算子段和,并通过动态规划状态dp[i]记录前i头奶牛的最大分组数。核心思路是枚举最后一段的起点j,当子段[j,i]和≥0且前j-1头牛可分组时,更新dp[i]为dp[j-1]+1。初始状态dp[0]=0,其他初始为-1表示不可达。最终若dp[n]为-1则输出"Impossible",否则输出最大分组数。算法时间复杂度O(n²),适用于n≤1000的情况。

2026-04-02 23:27:12 408

原创 P7158 「dWoi R1」Password of Shady

本文介绍了一个动态规划算法,用于计算满足特定条件的n位数的个数。题目要求构造一个n位数,其中数字k出现的次数为偶数次,且无前导零。算法通过预处理所有可能的n值,使用状态压缩(奇偶性)进行高效计算。对于n=1的情况,数字0被视为合法且包含在内;对于n≥2的情况,则不考虑0。通过状态转移方程dp[i][0] = (dp[i-1][0]*9 + dp[i-1][1]) % MOD和dp[i][1] = (dp[i-1][1]*9 + dp[i-1][0]) % MOD,算法在O(n)时间内预处理所有结果,随后可以

2026-03-28 13:47:38 489

原创 P3009 [USACO11JAN] Profits S

这篇文章介绍了一个解决最大子段和问题的动态规划算法(Kadane算法)。给定一个包含每天利润的整数序列(可正可负),要求找到连续子数组的最大和。算法通过定义dp[i]为以第i天结尾的最大子段和,状态转移方程为dp[i] = max(P[i], dp[i-1]+P[i])。最终结果是所有dp[i]中的最大值。文章详细解释了算法思路、代码实现和样例验证,并指出可以优化空间复杂度。该算法时间复杂度为O(n),适用于N≤1e5的情况。

2026-03-28 13:28:36 775

原创 P2800 又上锁妖塔

本文介绍了一个动态规划解决锁妖塔问题的算法。问题描述:小A需要爬上n层塔,可以选择花费时间爬楼或不花时间跳跃,但跳跃后必须至少爬一层才能再次跳跃。算法使用动态规划,定义dp[i][0]表示跳到第i层的最小时间,dp[i][1]表示爬到第i层的最小时间。状态转移时,跳跃只能从爬楼状态转移,而爬楼可以从任意状态转移。初始化时设置地面为爬楼状态(时间0),跳跃到第1层为0时间。最终答案为到达顶层时的两种状态中的最小值。该算法时间复杂度为O(n),能高效处理大规模输入。

2026-03-26 19:45:17 628

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除