P11432 [COCI 2024/2025 #2] 流明 / Blistavost 题解
前言
这题真难吧,机房一车人没一个会做??
思路
首先你如果不对这个题进行什么深入挖掘,八成是想不出任何多项式做法的啊,然后注意到这个数据范围,在不存在可行的贪心策略的情况下,基本就是让你去设计一个 的 dp 没跑了。
但他这个关灯的轨迹看起来非常的神秘,无规律可循,怎么才能把它转化成一个便于 dp 的形式呢?
发现一个事情:我们的起点是最左边,如果从一开始没有一路关到底的话,中间没有被关的灯迟早还是需要再折返回来关一次。
然后看到题目里给的限制是必须在 的时刻关掉区间里的灯,因此拖到折返的时候再关被空出来的地方后面的灯就是更划算的。那么你现在已经关掉了前缀的一段灯,如果从某个位置开始停止关闭前缀的灯,还需要向右走吗?那必然是需要的,否则直接从头关到尾不就好了吗(感觉像废话文学 T T)。那么此时向右走的目标就很明确了,即走到最右边去关闭后缀的一串灯,后面的过程与刚开始的时候类似。
由此我们便描绘出了本题的重要结论:任意时刻场上未被关闭的灯一定构成一段连续区间。到这里设计 dp 就变得不那么无从下手了。
设 为关掉了除 以外的所有灯、当前位置为 所需的最小时间, 为关掉了 外的所有灯,当前位置在 所需的最小时间。于是有转移:
其中 代表从 走到 的距离, 代表允许关掉第 个灯的最晚时间。解释一下式子的意义:以当前在 即这一步关掉了 处的灯的情况为例,则上一步要么是从 顺着走过来,要么就是关完 后折返回来。
具体实现上先把所有关键点离散化一下,然后暴力对所有区间的限制取 max,因为有 个点,两维 dp 数组可能开不太下,由于 的转移只与 和 的状态有关,可以倒着枚举 然后滚动数组一下。由于关灯过程一定在一个地方结束,答案就是所有 取 min。
时间复杂度 。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Misaka16172's Blog!
评论
re