- 博客(13)
- 收藏
- 关注
原创 P1970 [NOIP 2013 提高组] 花匠 题解及反思
摘要:本文讨论了通过动态规划解决花束排列问题的思路。通过设计两个状态数组dp1和dp2,分别表示第i朵花作为波峰或波谷时的最大花束数量。根据相邻花朵高度关系进行状态转移:当h[i]>h[i-1]时更新波峰状态,h[i]<h[i-1]时更新波谷状态,相等时保持原状态。最终结果为dp1[n]和dp2[n]中的最大值,时间复杂度为O(n)。该解法巧妙地将波折线问题转化为动态规划问题,避免了暴力枚举的高复杂度。
2025-11-13 12:45:42
328
原创 P1065 [NOIP 2006 提高组] 作业调度方案 题解及反思
摘要:本文分析了工件调度问题的解题思路,核心难点在于理解"插空优化"机制。题目要求在满足工序顺序和机器独占限制下,通过合理安排操作顺序最小化总加工时间。解题关键在于发现机器空闲时段并利用"尽量靠前插入"原则进行优化。作者通过示例表格展示初步顺序的缺陷,指出可通过动态调整工序位置来优化时间。文章还提供了C++实现代码,采用二维数组记录机器占用状态,逐步处理每个工件的工序。该方法确保了在满足约束条件下找到最优解。
2025-10-14 11:51:01
603
原创 P1969 [NOIP 2013 提高组] 积木大赛 题解及反思
【摘要】本文探讨了一道关于差分思想的算法题。作者最初尝试暴力解法(重复减去最小值),但意识到效率低下。通过学习题解,发现正确解法是从列的角度计算相邻高度差之和:当h[i]>h[i-1]时,将差值累加即为最小操作次数。该解法代码简洁高效(O(n)时间复杂度),通过差分思想将问题转化为简单的相邻元素比较。作者提供了完整的C++实现代码,并建议读者进一步思考优化空间。
2025-09-03 16:38:08
358
原创 P1569 [USACO11FEB] Generic Cow Protests 题解及反思
本文分享了作者在解决一道动态规划(DP)题目时的思考过程与反思。起初尝试二分查找法未果后转向DP解法,详细分析了状态设计(dp[i]表示前i个数的最大组数)和状态转移的难点。重点指出了两个关键坑点:1)不能简单地认为数越多DP值越大,需遍历所有可能状态;2)必须确保转移状态合法(dp[j]>0)。通过打印中间结果验证思路,最终实现了正确的解法。文章强调了DP题目对题意理解的深度要求,以及灵活分析的重要性,而非简单套用固定模式。
2025-08-25 22:22:08
633
原创 P7158 「dWoi R1」Password of Shady 题解及反思
摘要:本文讨论了一个关于n位数中包含偶数个数字k的动态规划问题。解题思路从枚举法转向动态规划,通过设计状态f[n](合法数)和g[n](非法数),建立了状态转移方程:f[i]=f[i-1]*9+g[i-1],g[i]=g[i-1]*9+f[i-1]。最终通过预处理f[]数组优化时间复杂度,并使用C语言输入输出避免超时。文章强调了动态规划的核心思想——将大问题分解为重叠子问题,并提供了AC代码实现。
2025-08-23 21:23:47
493
原创 P5542 [USACO19FEB] Painting The Barn S 题解及反思
本文探讨了二维数组在区域统计问题中的理解与应用。作者首先分析了二维数组元素a[i][j]的两种理解方式(点值或区域值),提出将其视为1×1矩形区域值的观点。文章详细介绍了暴力解法(三层循环)的局限性,引出了二维差分优化方案,解释了差分数组的计算逻辑和区域更新公式。通过调整坐标边界(x2--,y2--)解决了本题与标准模板的区别,并提供了完整的AC代码实现。最后强调了对二维差分核心概念的理解以及数学抽象思维在解题中的重要性。
2025-08-14 22:28:41
870
原创 P2280 [HNOI2003] 激光炸弹 题解及反思
本文讨论了一个特殊情况下的利用二维前缀和,求某个二维区间最值的问题。首先尝试从暴力解法从局部出发,但发现不能够有效解决,随后便调整角度,直接从可能的区域出发,快速求解区域面积,逐步引入二维前缀和,然后讨论了具体的细节问题,最后给出可行的AC代码。
2025-08-08 20:06:19
828
原创 P2866 [USACO06NOV] Bad Hair Day S 题解及反思
摘要:本文讨论了一个关于牛群高度问题的解题思路。首先尝试暴力解法(双层循环,90分),发现效率不足。优化时曾考虑倒序遍历维护单调栈,但因无法保持单调性而失败。最终采用正序遍历维护单调递减栈:当新元素大于栈顶时弹出栈顶,否则累加当前栈大小到答案中。关键点在于理解单调栈的动态维护过程,同时注意答案变量需使用long long类型。附AC代码展示了简洁高效的实现方法,体现了对问题本质的深刻理解和巧妙的算法设计。
2025-08-06 22:11:20
442
原创 P1901 发射站 题解及反思
本文探讨了求解站点能量最大值的算法优化问题。作者首先分析暴力解法(O(N^2))的局限性,进而考虑使用单调栈进行优化。关键思路在于:当栈顶元素遇到更高元素时,将能量转移给新元素;当遇到更低元素时,为栈顶元素增加能量。通过单次扫描即可完成计算,时间复杂度优化为O(N)。文章最后提供了AC代码实现,并保留暴力解法作为对比。该算法巧妙地利用单调栈特性处理高度关系,有效解决了能量传递问题。
2025-08-06 20:38:05
315
原创 P4387 【深基15.习9】验证栈序列 题解及反思
摘要:本文分享了作者对栈序列匹配问题的解题反思。最初尝试找规律失败后,意识到需要模拟入栈过程:通过逐个压入元素并与目标出栈序列匹配,当栈顶元素匹配时弹出并计数。最终栈空则判定为合法序列。作者坦言这种模拟思路虽简洁但并非易得,并通过AC代码验证了该方法的正确性。(149字)
2025-08-05 22:15:31
293
原创 P3662 [USACO17FEB] Why Did the Cow Cross the Road II S 题解及反思
1.初始暴力思路:枚举每一个起始位置,统计起始位置开始整个滑块中损害的灯的数量,最后在所有可能的结果中,取最小值即为答案 (100pts 竟然暴力通过了!2.思路优化难点:无非就是如何高效地统计滑块中损坏的灯的数量 (竟然没想到前缀和。3.正解思路:前缀和 利用前缀和 可以高效地得到某块区间中坏掉的灯的数量。整体来说,这题不难,但是想到正解,可能就是一刹那儿的事儿。注:以上内容均为个人的思路和理解,如有问题,欢迎指正!
2025-08-03 21:15:18
272
原创 P1886 滑动窗口 /【模板】单调队列 题解及反思
1.初步暴力思路:这个题的暴力挺好想的,无非是通过枚举滑块的起始位置,然后再基于起始位置枚举滑块中的数,找到最大值和最小值即可 (90pts 这题暴力很划算)2.优化思路难点:通过使用单调队列维护滑块中的最值① 放入数据和抛出数据(前抛or后抛)的规则是什么?最值在哪里取?范围问题如何处理?② 易错点:维护最小值(最大值)单调队列 队列是递增的(递减的) 这个得想清楚③ 如何处理往队列放数据时 滑块长度还未达到k的初始情况?(比如:k=3,但是对数据要从1开始处理,此时滑块长度不足 k)
2025-08-03 14:32:10
444
原创 P2058 [NOIP 2016 普及组] 海港 题解及反思
用“桶”的思想 nation[maxn] 当某个国家的人到了时 nation[i]++ 同时使用ans记录答案 (nation[i]==1 ans++ nation[i]==0 ans-- 这个也有难点,不好想到)②如何解决不在范围内的?不过这种题 应该不太会 毕竟最多86400。1.初步暴力思路:逐个记录每条船的到达时间及船上人的所在的国家 找到当前时间t至t-86400之间的所有船 暴力统计所有每个人所在的国家数 (利用集合 set)起始的位置 可以用二分找到 (因为时间是有序的) 70分左右。
2025-08-02 21:05:56
275
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅