数据备份 P3620 [APIO2007]题解
P3620 [APIO/CTSC2007] 数据备份 - 洛谷
已知办公楼都位于同一条街上。你决定给这些办公楼配对 (两个一组)。每一对办公楼可以通过在这两个建筑物之间铺设网络电缆使得它们可以互相备份。
然而,网络电缆的费用很高。当地电信公司仅能为你提供 K 条网络电缆,这意味着你仅能为 K 对办公楼 (或总计 2 K 个办公楼) 安排备份。任一个办公楼都属于唯一的配对组 (换句话说,这 2 K 个办公楼一定是相异的)。
此外,电信公司需按网络电缆的长度 (公里数) 收费。因而,你需要选择这 K 对办公楼使得电缆的总长度尽可能短。换句话说,你需要选择这 K 对办公楼,使得每一对办公楼之间的距离之和 (总距离) 尽可能小。
输入格式
输入文件的第一行包含整数 N 和 K,其中 N (1 ≤N ≤10⁵) 表示办公楼的数目,K (1 ≤K ≤ 表示可利用的网络电缆的数目。
接下来的 N 行每行仅包含一个整数 s (0 ≤s ≤10⁹),表示每个办公楼到大街起点处的距离。这些整数将按照从小到大的顺序依次出现。
输出格式
输出文件应当由一个正整数组成,给出将 2 K 个相异的办公楼连成 K 对所需的网络电缆的最小总长
正式题解!
一、分析性质:
证明:反正,假设对于四个顺序的楼 abcd,ad 间连电缆, 显然对全局不优;如果 ad 和 bc 间连线缆,也一定不优
二、涉及决策,先看看缩小问题规模:
缩小 n:缩小之后,问题解决难度没有降低,仍是在一定区间内选若干连线,反而每一段连多少线也都难以确定, 不可取
缩小 k:
i. 当 k = 1 时,问题得以求解,选择最小的间隙即可。
ii. 不好一步扩展到 k,先继续扩展到 k = 2,看看如何决策:
此时已经选了第 i 间隙:
- 一个显然的可能决策,选择除了 i-1,i,i+1 的最小的间隙 j
很显然,需要 i 和 j 不相邻,当两个最小间隙不相邻,实施这个决策。
- 如果两个最小间隙 i 和 j 相邻,从头重新选择,即不选间隙 i,看看怎么选两个间隙保证最优:
样例暗示选择第
样例暗示选择第 i-1 个和第 i+1 个,或者选 i 和除去:
- 没有其他的可行决策
证明:
- 性质 1):如果两个最小间隙不相邻,不选他们俩肯定不优。
- 性质 2):注意这个决策触发前提:两个最小间隙 i 和 j 相邻,我们还不选 i 和其他的 较小间隙,即不选 i:
如果选择次小间隙
如果选择次小间隙 j (挨着 i,设成 i-1),不选 i+1,显然可以通过把 j 换成 i,达到更优,所以如果想选择 i-1 或 i+1,这两个要捆绑选择。
- 性质 3) 易证。
iii. 继续扩展到 k = 3,仿照 k = 2,看看能不能使决策相同,便于递推:
- 新选一条和 i、j 都不相邻的间隙 h (和 ii.1) 决策方法一样)
- i 和 j 正好就隔 1,从头选择,并且选择中间的那个间隙 h 仿照 ii. 2) 选择 h-2,h,h+2:
- 没有其他决策
证明:
- 易证
- 决策之前,我们选择 i 和 j,最优
根据 上文证明,h 和 h+2 捆绑选择,h-2 和 h 捆绑选择,我们只需证对于 h-2 和 h,h+2 也和他们俩捆绑选择。
类似于 ii. 的证明,如果不捆绑选择
类似于 ii. 的证明,如果不捆绑选择 h+2,反而选择了另外一个 t,那么可以把 h-2 和 h 换成 i 和 j,更优。
iv. 扩展到 k = 4
- 新选一条和原来间隔都不相邻的间隙 h (和 ii.1) 决策方法一样)
- 在原来选择间隔的中间选择 v......, 范围缩放法实施完毕
三.代码实现:
- 决策 1 直接在堆里面找最小
- 决策 2,即抛弃中间,替换两边,在选择区间 i 时,在堆中 加入 \(a [i-1]+a [i+1]-a \),实现替换
如果当前 k=3 ? 已然在 k=2 时候选择
\[p=a[i-1]+a[i+1]-a\]
现在想要换成;\(a [i-2]+a +a [i+2]\),只需在 k=2 决策时压入
\[p'=a[i-2]+a[i+2]+a-a[i-1]-a[i+1]=a[i-2]+a[i+2]-p\]
这个方法保证了大问题和小问题的求解方法相同
豆包提供格式整理
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |