- 博客(29)
- 收藏
- 关注
原创 方格取数 - 动态规划解法(静态数组版)
摘要 方格取数动态规划解法采用静态数组优化空间,通过双向状态传递计算最大路径和。算法核心包括:1)定义dp[i][j]表示位置(i,j)的最大分数;2)列间转移(从左侧进入)与列内双向传递(上下方向);3)使用down/up数组临时存储列内最优解。首列特殊处理为垂直向下累加,后续列通过比较左右和上下方向的最大值更新状态。该解法时间复杂度O(nm),空间复杂度O(nm),能高效解决网格路径优化问题。
2025-08-11 17:37:37
1
原创 P2028 龙兄摘苹果 - 第二类斯特林数详解
本文介绍了使用动态规划计算第二类斯特林数的方法,解决将n个不同苹果放入k个非空篮子的方案数问题。核心算法基于递推公式S(n,k)=k×S(n-1,k)+S(n-1,k-1),通过滚动数组优化将空间复杂度降至O(k)。文章详细说明了边界条件处理、倒序更新策略等优化点,并给出C++实现代码。算法在时间复杂度O(nk)下高效运行,通过了n=1e4、k=1e3的极限测试,具有空间高效、边界完备、工程友好等特点。
2025-08-11 15:53:52
213
原创 P7074 [CSP-J2020] 方格取数 - 动态规划解法
本文介绍了P7074方格取数问题的动态规划解法。该题要求在网格中从左上到右下寻找最大路径和,移动方向限于右、上、下且不能重复访问格子。核心算法采用按列处理方式,通过双向状态传递(向下和向上)优化计算。实现时使用滚动数组将空间复杂度降至O(n),并处理了单列等特殊情况。算法时间复杂度为O(n×m),能正确处理全负值、单行等极端情况。代码通过双向独立传递确保路径完整性,已通过大规模数据测试验证。
2025-08-11 11:29:40
80
原创 P2359 三素数数 - 动态规划解法
本文提出了一种基于动态规划的算法,用于计算n位三素数数的个数,要求所有连续三位数字构成的数都是大于100的素数。算法通过预处理100-999的素数表,定义状态dp[i][j][k]表示长度为i的数字且最后两位为j和k时的方案数,采用状态转移方程进行递推计算。通过剪枝优化和边界条件处理,该算法能够高效处理n≤10000的大规模数据,时间复杂度为O(n×10³),空间复杂度为O(n×10²)。测试验证表明,该方法在n=1e4规模下耗时<500ms,具有高效性、精确性和鲁棒性。
2025-08-11 08:40:13
247
原创 P1481 魔族密码 - 动态规划解法
本文介绍了一种动态规划解法用于求解最长单词词链问题(每个单词是后一个的前缀)。算法核心是维护以每个单词结尾的最长词链长度dp数组,利用字典序特性优化前缀检查。时间复杂度O(n²·L),空间复杂度O(n)。代码实现简洁高效,通过实时更新最大值和字典序单向检查等优化,能够处理各种边界情况。测试验证表明该方法能正确求解包括最大规模在内的所有测试用例。
2025-08-11 08:16:11
224
原创 P1388 算式 - 动态规划解法(分段乘法)
摘要:本文介绍了一种基于动态规划的数字序列分段乘法优化算法。通过定义状态dp[i][j]表示前i个数字分成j段的最大乘积,并利用前缀和优化区间和计算,实现了O(n²k)时间复杂度的解法。算法核心包括三重循环动态规划、边界条件处理和多种优化策略,如循环剪枝和状态转移优化。代码实现简洁高效,正确处理了各类边界情况,并通过前缀和将区间和计算降至O(1)。该解法适用于求解将数字序列分成k+1段后各段和相乘的最大值问题,已在洛谷测试用例验证通过。
2025-08-11 08:13:55
186
原创 P1149 [NOIP2008 提高组] 火柴棒等式 - 高效枚举解法
《火柴棒等式高效枚举解法》摘要: 本文提出了一种解决火柴棒等式问题的高效算法。通过预处理0-2400所有数字的火柴棒数量(0-9分别需6,2,5,5,4,5,6,3,7,6根),实现O(1)时间查询。算法枚举A(0-1200)和B(0-1200),计算C=A+B,验证总火柴棒数是否等于n-4(加号和等号各需2根)。优化包括:预处理避免重复计算、合理设置枚举范围、跳过无效组合。时间复杂度O(K²)(K=1201),空间复杂度O(2401)。算法高效精确,已通过各类测试用例验证。
2025-08-11 08:04:14
80
原创 P2800 又上锁妖塔 - 动态规划解法
📝 P2800 又上锁妖塔 - 动态规划解法摘要 该问题要求计算爬上n层锁妖塔的最短时间,允许跳跃1/2层(不耗时)但跳跃后必须爬一层。采用动态规划: 1️⃣ 状态定义:dp[i]表示爬到第i层并停留的最小耗时 2️⃣ 转移方程:dp[i] = min(dp[i-1], dp[i-2], dp[i-3]) + h[i] 3️⃣ 优化措施:滚动数组将空间复杂度降至O(1),分层处理边界条件 4️⃣ 最终解:取最后三层的dp最小值 ⏱️ 复杂度:O(n)时间 / O(1)空间 ✅ 特点:鲁棒性强,支持1e6规
2025-08-11 08:01:21
159
原创 P1103 书本整理 - 动态规划解法
本文介绍了P1103书本整理问题的动态规划解法。该问题需要在n本书中删除k本,使剩余书本按高度排序后相邻书本宽度差之和最小。解法核心是:1) 按高度排序书本;2) 定义状态dp[i][j]表示前i本书选j本(必选第i本)的最小不整齐度;3) 通过三重循环实现状态转移。算法时间复杂度O(n²·m),空间复杂度O(n·m),能正确处理各种边界情况,已通过洛谷测试用例验证。最终输出所有可能结尾中的最小不整齐度。
2025-08-11 07:56:11
80
原创 P3399 丝绸之路 - 动态规划解法(滚动数组优化)
本文介绍了一种动态规划解法求解P3399丝绸之路问题,使用滚动数组优化空间。算法通过定义dp[i][j]表示第j天到达第i个城市的最小疲劳值,状态转移考虑休息或移动两种决策。核心优化包括:1)时间剪枝减少无效计算,2)使用long long防溢出,3)滚动数组将空间复杂度降至O(M)。样例演示展示了算法逐步计算最优解的过程,时间复杂度为O(NM)。该解法已通过所有测试用例验证,适用于大规模数据,能正确处理各种边界情况。
2025-08-11 07:55:02
154
原创 P1970 [NOIP2013 提高组] 花匠 - 贪心解法
《花匠问题贪心解法》摘要:本文提出了一种利用贪心算法求解最长波浪形子序列的高效方法。算法核心在于识别并保留趋势转折点(波峰和波谷),通过单次遍历数组,动态更新极值和方向状态。实现时处理了初始方向确定、相等元素跳过、单调区间极值更新等关键点,确保O(n)时间复杂度和O(n)空间复杂度。该解法能正确处理全等序列、单调序列等边界情况,通过保留极端值最大化后续波动可能。代码简洁高效,已通过包括极端数据在内的各类测试验证。
2025-08-11 07:54:20
70
原创 P2800 又上锁妖塔 - 动态规划解法
本文介绍了P2800题"又上锁妖塔"的动态规划解法。通过定义状态dp[i]表示到达第i层的最短时间,采用状态转移方程dp[i] = min(dp[i-1], dp[i-2], dp[i-3]) + h[i],考虑跳跃和爬行的约束条件。算法使用滚动数组优化空间至O(1),并特殊处理n≤3的边界情况。时间复杂度O(n),适用于大规模数据,已通过所有测试用例验证。核心代码约20行,简洁高效地解决了该问题。
2025-08-11 07:53:15
104
原创 P1057 [NOIP 2008 普及组] 传球游戏 - 动态规划解法
摘要:本文介绍了NOIP 2008普及组传球问题的动态规划解法。使用状态转移方程dp[i][j] = dp[i-1][左邻] + dp[i-1][右邻],通过滚动数组优化将空间复杂度降至O(n)。算法核心是模拟每次传球过程,利用模运算处理环形结构,并给出C++实现代码。复杂度分析表明该解法时间复杂度为O(mn),适合n,m≤30的数据规模。文中还包含算法演示、特殊情况处理及优化特点说明,验证了算法的高效性和健壮性。
2025-08-11 07:51:41
120
原创 P1569 [USACO11FEB] Generic Cow Protests - 动态规划解法
本文介绍了一种动态规划解法,用于解决奶牛序列分组问题。通过定义dp[i]表示前i头奶牛的最大分组数,利用前缀和优化快速验证子段合法性,实现O(n²)时间复杂度的算法。核心思路是遍历所有可能的分割点,当子段和≥0时进行状态转移(dp[i] = max(dp[i], dp[j]+1))。算法包含前缀和预处理、无效状态剪枝等优化,能正确处理全负序列等边界情况。代码简洁高效,空间复杂度为O(n),适用于中等规模数据。示例演示了输入[2,3,-3,1]的分组过程,最终输出最优分组数3。
2025-08-11 07:44:06
125
原创 P7158 「dWoi R1」Password of Shady - 快速幂与预处理解法
解题摘要 题目:计算满足特定条件的n位数数量(数字k出现偶数次) 核心解法: 数学推导得出公式:F(n) = (9×10^(n-1) + 7×8^(n-1))/2 mod 998244353 预处理10和8的幂次模值,优化计算效率 使用快速幂和逆元处理模运算 优化点: 预处理幂次(O(n)时间) 逆元加速除法运算 批量IO处理提升效率 复杂度: 预处理:O(max_n) 查询:O(1)每查询 空间:O(max_n) 适用于大规模查询(t≤1e5),已通过严格测试验证。
2025-08-10 17:05:19
156
原创 P3009 [USACO11JAN] Profits S - Kadane算法解法
该文介绍了Kadane算法在求解最大连续子段和问题中的应用。文章详细解析了算法核心思想:通过维护current_sum和max_sum两个变量,以O(n)时间复杂度和O(1)空间复杂度高效解决问题。代码实现简洁,包含边界处理(全负数、单元素序列等特殊情况)。算法特点包括线性效率、代码简洁、健壮性强,适用于大规模数据处理,已通过洛谷全部测试用例验证。文章还提供了具体样例演示和复杂度分析,展示了该算法在各类场景下的优异表现。
2025-08-10 17:04:09
168
原创 P1796 汤姆斯的天堂梦 - 动态规划解法
本文介绍了P1796汤姆斯的天堂梦问题的动态规划解法。算法通过定义dp[i][j]表示到达第i级第j个星球的最小费用,采用状态转移方程逐级更新最优解。代码实现使用二维数组存储状态,初始化边界条件后,通过流式读取输入数据并实时更新状态表。优化点包括空间预分配、剪枝处理和高效输入读取。该算法具有O(N×K×E)的时间复杂度和O(N×K)的空间复杂度,能正确处理负权边和复杂路径,保证全局最优解。测试验证表明算法能高效处理最大数据规模。
2025-08-10 17:02:51
86
原创 P1203 [USACO1.1] 坏掉的项链 - 记忆化搜索解法
本文介绍了解决环形项链问题的记忆化搜索方法。问题要求在环形项链中找到一个断开位置,使得收集的连续同色珠子最多,其中白色珠子可视为任意颜色。 核心思路: 将项链复制三份处理环形结构 使用记忆化搜索递归计算每个断开点向左/右能收集的最大珠子数 定义颜色状态:0=未定,1=红,2=蓝 对每个断开点合并左右结果,取最大值 算法特点: 时间复杂度O(n²),空间复杂度O(n) 巧妙处理环形结构(三倍复制) 记忆化搜索避免重复计算 特殊处理全白色项链情况 该方法能高效解决n≤350的问题,已通过USACO官方测试。
2025-08-10 15:15:58
132
原创 P1968 美元汇率 - 动态规划解法
这篇题解介绍了P1968"美元汇率"问题的动态规划解法。算法通过跟踪每天的最优美元和马克持有量,在每天选择保持或转换货币,最后强制转换为美元。核心思想是状态转移:dollar和mark变量分别表示当前持有美元/马克的最大价值,通过比较保持或转换货币的价值来更新状态。代码实现采用滚动变量优化空间复杂度至O(1),并处理了单日特判等边界情况。算法时间复杂度O(n),空间复杂度O(n)(存储汇率),已通过所有测试用例验证。
2025-08-10 14:05:28
233
原创 P2837 [USACO08FEB] Dining Cows B - 线性扫描解法
本文介绍了P2837题目的线性扫描解法,通过前缀和优化计算将队列调整为1在前、2在后的最小修改次数。算法预处理前缀和数组,枚举分割点快速计算代价,时间复杂度O(n),空间复杂度O(n)。核心思路是分割点i将序列分为前i个1和后n-i个2,代价为前部2的数量加后部1的数量。该方法高效处理边界情况,已通过洛谷所有测试用例验证。
2025-08-10 11:32:41
261
原创 P1203 [USACO1.1] 坏掉的项链 - 动态规划解法(C++版)
本文介绍了一种解决环形项链问题的动态规划方法。算法通过三倍复制字符串处理环形结构,使用状态机模型跟踪三种颜色(白、红、蓝)的最大连续长度。双向动态规划分别计算每个位置向左和向右的最大连续值,最后合并结果。该方法时间复杂度O(n),空间复杂度O(n),能高效处理350规模数据,并自动处理全白等特殊情况。代码实现展示了状态转移逻辑和环形处理技巧,已通过USACO官方测试用例验证。
2025-08-10 11:22:23
372
原创 P8395 [CCC 2022 S1] Good Fours and Good Fives - 数学优化解法
本文提出了一种高效求解"Good Fours and Good Fives"问题的数学优化方法。通过将问题建模为4x+5y=n的线性方程,利用同余性质(5≡1 mod4)将y的枚举范围缩小为仅需检查满足y≡n mod4的值。算法实现中采用步长4的枚举策略,并加入起始值调整和负数过滤机制,使时间复杂度优化至O(n/20)。该方法在保持代码简洁(约10行核心逻辑)的同时,能正确处理边界情况,已通过包括n=1e6在内的大量测试验证。特别适合处理1≤n≤1e6的大规模数据,具有高效性、鲁棒性和资
2025-08-10 10:49:49
146
原创 Luogu 美化插件
本文介绍了多款Luogu美化插件及安装教程。推荐了13个实用插件,包括界面优化、功能增强、搜索强化等类型。详细说明了Chrome浏览器的安装步骤:首先安装Tampermonkey和Stylus两个前置插件,然后分别通过Greasy Fork等平台安装各类功能插件。文章提供了每个插件的具体下载链接,并配有图文指引,涵盖从基础插件安装到个性化设置的全过程。所有插件均来源于网络,安装后能显著提升Luogu使用体验。
2025-08-10 10:23:56
733
原创 P1216 [IOI 1994] 数字三角形 - 动态规划解法
本文介绍了数字三角形问题的动态规划解法。采用自底向上策略,通过状态转移方程dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j]计算最大路径和。使用滚动数组优化空间至O(n),时间复杂度为O(n²)。算法具有代码简洁、效率高、可扩展性强等特点,能正确处理各种边界情况,已通过大规模数据测试验证。样例输入5行金字塔时,正确输出最大路径和30。
2025-08-10 10:04:42
218
原创 P1130 红牌 - 动态规划解法
本文介绍了解决"红牌"问题的动态规划方法。算法通过定义dp[j]表示当前步骤由小组j执行的最小天数,采用状态转移方程dp_curr[j] = min(dp_prev[j], dp_prev[(j-1)%m]) + cost[j][i]进行递推。使用滚动数组优化将空间复杂度降至O(m),并巧妙处理小组的环形结构。该算法时间复杂度O(nm),适用于n,m≤2000的数据规模,已通过洛谷所有测试用例,包括最大规模情况。代码简洁高效,核心逻辑约20行,能正确处理单步骤、单小组等特殊情况。
2025-08-10 09:40:10
345
原创 P8707 [蓝桥杯 2020 省 AB1] 走方格 - 动态规划解法
这篇题解介绍了蓝桥杯省赛题"走方格"的动态规划解法。文章首先定义了状态dp[i][j]表示到达坐标(i,j)的路径数,并给出了状态转移方程,其中双偶格(行列均为偶数)的路径数为0。通过边界初始化和二维数组实现基础解法,时间复杂度O(n×m)。进一步提出了空间优化方案(滚动数组降至O(m))和边界预处理技巧。最后通过样例图解和特殊情况分析,验证了算法的正确性和鲁棒性,适用于各类竞赛场景。该解法直观高效,已通过官方测试验证。
2025-08-10 09:36:48
236
原创 P2008 大朋友的数字 - 动态规划解法
本文介绍了动态规划解决最长不下降子序列和问题的方案。通过维护三个状态数组:dp_len记录序列长度,dp_sum记录序列和,best_j记录前驱位置,在O(n²)时间内解决问题。算法特点包括:1) 双状态维护;2) 优先选择更小下标保证字典序;3) 条件剪枝优化。适用于n≤1e4规模的数据,代码简洁高效,可输出每个位置结尾的最优序列和。样例演示验证了算法的正确性。
2025-08-10 09:33:21
280
原创 P1203 [USACO1.1] 坏掉的项链 Broken Necklace - 环形遍历解法
本文介绍了环形项链问题的解法,通过枚举每个断开点双向收集同色珠子。算法采用取模运算处理环形结构,灵活处理白色珠子(初始收集白色,确定颜色后继续收集同色或白色)。时间复杂度O(n²)适用于n≤350的情况,空间复杂度O(n)。关键优化包括环形遍历技巧、颜色决策逻辑和双向独立处理。特殊处理全白/单色项链情况,确保结果不超过n。该解法直观模拟收集过程,代码简洁高效(约30行),能正确处理环形边界和颜色转换。
2025-08-10 09:30:09
273
原创 P2362 围栏木桩 - 动态规划解法
摘要:本文介绍了P2362围栏木桩问题的动态规划解法,通过维护最长非降序子序列(LIS)的长度和方案数来解决问题。关键步骤包括初始化dp和cnt数组,状态转移时更新长度和方案数,最后统计结果。算法特点包括双重状态维护、精确累加逻辑和O(n²)时间复杂度。代码实现清晰展示了动态规划思想,并修正了原题解中方案数计算的错误逻辑。
2025-08-10 09:25:37
270
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人