1 条题解
-
0
题目分析
本题是 JOI Open 2013 的一道优化问题,需要在一个长度为 的道路上,用有限数量的小型相机(覆盖长度 )和大型相机(覆盖长度 )来覆盖所有活动点,目标是最小化参数 。
问题重述
我们有 个活动点,坐标分别为 。
给定:- 台小型相机:每台能覆盖连续最多 个格子
- 台大型相机:每台能覆盖连续最多 个格子
要求:
- 选择一个正整数
- 放置所有相机(位置固定,不能移动)
- 确保每个活动点都被至少一台相机覆盖
目标是:找到最小的 使得用这些相机能覆盖所有活动点。
关键观察
1. 单调性
- 如果某个 可行,那么所有更大的 也一定可行(因为覆盖范围更大)
- 如果某个 不可行,那么所有更小的 也一定不可行
这个单调性提示我们可以使用二分查找来寻找最小的可行 。
2. 坐标排序
由于相机只能覆盖连续区间,我们需要先对活动点按坐标排序,假设排序后为: 排序后问题转化为:用有限区间覆盖所有点。
3. 覆盖策略
对于给定的 :
- 小型相机:可覆盖长度 的区间
- 大型相机:可覆盖长度 的区间
显然,大型相机的覆盖能力是小型相机的两倍,所以应该优先使用大型相机。
二分框架
设二分查找的范围为 :
- (最小可能的 )
- (最大坐标差)
每次取中点 ,检查 是否可行。
可行性检查的核心算法
对于给定的 ,我们需要判断能否用不超过 台小型相机和 台大型相机覆盖所有点。
贪心策略
遍历排序后的点,每次尽可能用大型相机覆盖尽可能多的连续点:
- 从当前未覆盖的第一个点 开始
- 尝试用大型相机:
- 如果还有大型相机可用,且覆盖区间 能包含尽可能多的后续点
- 将这些点标记为已覆盖,移动到下一个未覆盖点
- 大型相机数量减 1
- 否则尝试用小型相机:
- 如果还有小型相机可用,覆盖区间
- 将这些点标记为已覆盖
- 小型相机数量减 1
- 如果两种相机都已用完但还有点未覆盖,则 不可行
贪心正确性证明
为什么优先使用大型相机是最优的?
直观理解:大型相机覆盖范围是小型相机的两倍。假设我们有 台大型相机,如果某次能用大型相机却用了小型相机,那么相当于浪费了额外的覆盖能力,可能需要在后面使用更多相机。
形式化证明(交换论证): 假设存在一个最优解,其中某个位置本可以用大型相机却用了小型相机。考虑将这个小型相机替换为大型相机,覆盖范围扩大。这样可能释放出其他相机,或者减少所需相机总数。通过一系列这样的交换,总可以得到一个优先使用大型相机的解。
边界情况与优化
1. 相机足够多的情况
如果 ,那么即使 也一定可行:每台相机覆盖一个点即可。
2. 覆盖区间的确定
当从点 开始放置相机时,应该让相机覆盖到尽可能远的点,即:
- 大型相机:覆盖所有满足 的点
- 小型相机:覆盖所有满足 的点
这可以通过双指针技术高效实现:维护指针 表示当前起点,指针 表示能被覆盖的最远点。
3. 二分查找的实现细节
二分查找时采用左闭右开或左闭右闭区间均可,关键是要确保收敛到最小解。常见写法:
int l = 1, r = 1e9; while (l < r) { int mid = (l + r) / 2; if (check(mid)) { r = mid; } else { l = mid + 1; } } return l;
复杂度分析
1. 排序
排序 个点:
2. 二分查找
二分范围 ,需要 次迭代。
3. 每次检查
贪心检查需要遍历所有点一次:
总复杂度:
对于 ,这完全可行(约 次操作)。
算法正确性证明
1. 二分查找的正确性
由单调性保证:如果 可行,则所有 都可行。因此二分查找能找到最小可行解。
2. 贪心检查的正确性
引理:在最优解中,每个相机的覆盖区间必然从某个活动点开始。 证明:如果相机覆盖区间不从活动点开始,可以将区间向左平移直到碰到一个活动点,这样不会减少覆盖的活动点。
基于这个引理,我们总是从当前未覆盖的最左边活动点开始放置相机。
贪心选择性质:从当前点 开始,优先使用大型相机不会使解变差。 证明:假设在某步,我们选择使用小型相机覆盖 到 ,而实际上可以用大型相机覆盖 到 (其中 )。那么:
- 小型相机方案:覆盖 ,剩余 需要覆盖
- 大型相机方案:覆盖 ,剩余 需要覆盖
由于 ,大型相机方案剩余的未覆盖区间更短,需要的相机数量不会更多。
因此,优先使用大型相机的贪心策略是正确的。
扩展与变体
1. 如果相机可以移动?
如果相机可以移动(动态调整),问题变为调度问题,需要不同的解法。
2. 如果相机覆盖长度不同?
如果小型相机覆盖 ,大型相机覆盖 (),算法类似,仍然优先使用覆盖能力强的相机。
3. 如果要求最小化相机总数?
这是经典的区间覆盖问题,可以用贪心算法直接求解:按区间右端点排序,每次选择能覆盖当前最左未覆盖点且右端点最远的区间。
实际应用背景
这个问题在实际中有很多应用:
1. 监控摄像头布置
在长街道上布置监控摄像头,不同型号摄像头覆盖范围不同,预算有限时需要最小化摄像头能力参数。
2. 无线基站部署
在一条公路上部署基站,不同型号基站信号覆盖半径不同,需要确保所有区域都有信号覆盖。
3. 资源分配问题
可以看作是一种特殊的资源分配问题:有两种资源(小型和大型),需要覆盖所有需求点。
总结
本题的解法结合了多个算法思想:
- 排序预处理:将无序点转化为有序序列
- 二分答案:利用单调性寻找最小可行解
- 贪心算法:在检查可行性时,优先使用覆盖能力强的资源
- 双指针技巧:高效确定每个相机能覆盖的范围
这种"二分答案+贪心检查"的模式在竞赛中非常常见,适用于具有单调性且检查函数容易实现的优化问题。
关键是要识别出问题的单调性,并设计高效的检查算法。本题中,检查算法的时间复杂度是 ,结合二分查找的 ,总复杂度完全可接受。
通过这个问题,我们学习了如何在资源受限的情况下进行最优覆盖,以及如何将实际问题抽象为算法问题并设计高效解法。
- 1
信息
- ID
- 6022
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 21
- 已通过
- 1
- 上传者