- 博客(10)
- 收藏
- 关注
原创 P2701 [USACO5.3] 巨大的牛棚 Big Barn
本文介绍了两种解决农场最大空旷正方形问题的动态规划方法。第一种正方形DP方法通过构建二维数组f[i][j]记录以(i,j)为右下角的最大正方形边长,状态转移方程为取左、上、左上三个方向最小值加1。第二种悬线法DP通过维护左、右、上三个方向的边界数组,动态计算每个位置能形成的最大矩形区域并取其最小边作为正方形边长。两种方法均能在O(n²)时间内解决问题,其中n为农场边长,适用于在带有障碍物的网格中寻找最大正方形区域的场景。
2025-12-12 11:34:14
127
原创 01背包问题——多种写法
本文展示了四种解决0-1背包问题的算法实现:1) 朴素DFS递归解法,时间复杂度高;2) 记忆化搜索优化,通过存储中间结果避免重复计算;3) 二维动态规划解法,使用表格存储状态转移;4) 滚动数组优化,将空间复杂度降为O(m)。所有算法都基于相同思路:对于每件物品,决策是否放入背包以获得最大价值,区别在于优化程度。其中写法4在空间效率上最优,仅需一维数组,是实际应用中的首选方案。
2025-12-04 11:10:12
188
原创 P1439 两个排列的最长公共子序列 LCS 优化
该代码求解两个排列的最长公共子序列(LCS)。通过将第二个排列转换为第一个排列中的位置序列,将问题转化为求最长上升子序列(LIS)。使用贪心算法结合二分查找优化LIS求解,时间复杂度为O(nlogn)。最终输出LIS长度即为两个排列的LCS长度。
2025-12-03 13:23:30
100
原创 P6225 [eJOI 2019] 异或橙子-树状数组
本文实现了一个基于树状数组的区间异或查询系统。通过维护两个树状数组(分别存储奇偶位置的数据),支持两种操作:1)单点修改,将指定位置的值更新为给定值;2)区间查询,计算给定区间内所有子区间异或和的异或结果。关键点在于:当区间长度为偶数时结果为0;为奇数时结果为该区间内与左端点同奇偶性位置的异或和。算法利用树状数组高效处理前缀异或和,实现O(logn)时间复杂度的查询和更新操作。
2025-11-28 15:40:16
175
原创 B3872 [GESP202309 五级] 巧夺大奖
本文展示了两种解决任务调度问题的C++实现算法。第一种方法使用小顶堆维护任务奖励,按截止时间排序后贪心选择,移除无法完成的最小奖励任务,时间复杂度为O(nlogn)。第二种方法按奖励降序排序,优先安排高奖励任务,使用时间标记数组确保按时完成,时间复杂度为O(n^2)。两种方法都能最大化任务收益,但堆解法效率更高。核心思想都是贪心策略,通过不同数据结构实现任务的最优调度。
2025-11-06 15:24:07
103
原创 P1379 八数码难题 未完结
本文介绍了一个使用BFS和map求解八数码问题的C++实现。程序通过将3x3的数码状态编码为数字,利用BFS搜索从初始状态到目标状态(123804765)的最短路径。算法使用map记录已访问状态及其步数,通过方向数组实现空格移动,每次生成新状态后检查是否到达目标。时间复杂度取决于状态空间大小,空间复杂度由map存储决定,适合求解小规模八数码问题。
2025-11-05 10:39:47
192
原创 luogu-P1544 三倍经验题解
该代码提供了两种解决数字金字塔问题的算法:记忆化搜索和动态规划。两种方法都允许在路径选择过程中使用k次3倍得分机会。记忆化搜索采用自顶向下的递归实现,通过状态数组避免重复计算;动态规划则采用自底向上的迭代方式,逐步构建最优解。两种算法都考虑了在每一步选择左下/右下路径时,是否使用3倍机会的情况,最终求得从金字塔顶部到底部的最大可能得分。代码中均包含详细注释,解释了关键变量和逻辑步骤。
2025-11-04 09:45:33
127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅