数据备份 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 间隙:

  1. 一个显然的可能决策,选择除了 i-1ii+1 的最小的间隙 j

    很显然,需要 ij 不相邻,当两个最小间隙不相邻,实施这个决策。

  2. 如果两个最小间隙 ij 相邻,从头重新选择,即不选间隙 i,看看怎么选两个间隙保证最优:

    样例暗示选择第

    样例暗示选择第 i-1 个和第 i+1 个,或者选 i 和除去:

  3. 没有其他的可行决策

    证明:

  • 性质 1):如果两个最小间隙不相邻,不选他们俩肯定不优。

  • 性质 2):注意这个决策触发前提:两个最小间隙 ij 相邻,我们还不选 i 和其他的 较小间隙,即不选 i

    如果选择次小间隙

    如果选择次小间隙 j (挨着 i,设成 i-1),不选 i+1,显然可以通过把 j 换成 i,达到更优,所以如果想选择 i-1i+1,这两个要捆绑选择。

  • 性质 3) 易证。

iii. 继续扩展到 k = 3,仿照 k = 2,看看能不能使决策相同,便于递推:
  1. 新选一条和 ij 都不相邻的间隙 h (和 ii.1) 决策方法一样)

  2. ij 正好就隔 1,从头选择,并且选择中间的那个间隙 h 仿照 ii. 2) 选择 h-2hh+2

  3. 没有其他决策

    证明:

  1. 易证

  2. 决策之前,我们选择 ij,最优

    根据 上文证明,hh+2 捆绑选择,h-2h 捆绑选择,我们只需证对于 h-2hh+2 也和他们俩捆绑选择。

    类似于 ii. 的证明,如果不捆绑选择

    类似于 ii. 的证明,如果不捆绑选择 h+2,反而选择了另外一个 t,那么可以把 h-2h 换成 ij,更优。

iv. 扩展到 k = 4
  1. 新选一条和原来间隔都不相邻的间隙 h (和 ii.1) 决策方法一样)

  2. 在原来选择间隔的中间选择 v......, 范围缩放法实施完毕

三.代码实现:

  1. 决策 1 直接在堆里面找最小

  2. 决策 2,即抛弃中间,替换两边,在选择区间 i 时,在堆中 加入 \(a [i-1]+a [i+1]-a [i]\),实现替换

如果当前 k=3 ? 已然在 k=2 时候选择

\[p=a[i-1]+a[i+1]-a[i]
\]

现在想要换成;\(a [i-2]+a [i]+a [i+2]\),只需在 k=2 决策时压入

\[p'=a[i-2]+a[i+2]+a[i]-a[i-1]-a[i+1]=a[i-2]+a[i+2]-p
\]

这个方法保证了大问题和小问题的求解方法相同

豆包提供格式整理

P3620 数据备份 题解的更多相关文章

  1. 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)

    洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...

  2. BZOJ1150:[APIO/CTSC2007]数据备份——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1150 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的 ...

  3. 洛谷 [P3620] 数据备份

    贪心神题 首先我们发现一个显然的贪心策略,连接相邻两个写字楼总是更优. 所以本题就变成了数轴上一堆点,要选 k 个彼此不相邻的区间,使得区间长度最小 对于 10000 的数据来说,我们可以用 DP 解 ...

  4. 洛谷P3620 数据备份

    好吧,我一开始说这是个神级数据结构毒瘤题,后来改成神题了. 主要是贪心做法的巧妙转化: 首先发现选择的一对必须相邻,于是我们搞出差分. 然后考虑选取最小值时,最小值两侧的数要么同时选,要么都不选. 然 ...

  5. P3620 [APIO/CTSC 2007]数据备份

    P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...

  6. 洛谷 P3620 [APIO/CTSC 2007]数据备份 解题报告

    P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...

  7. 题解:[APIO/CTSC 2007]数据备份

    你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣.已 ...

  8. 洛谷P3620 [APIO/CTSC 2007] 数据备份 [堆,贪心,差分]

    题目传送门 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽 ...

  9. P3620 [APIO/CTSC 2007]数据备份[优先队列+贪心]

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...

  10. 数据备份[APIO/CTSC 2007]题解

    题目描述 你在一家IT公司为大型写字楼或办公楼的计算机数据做备份. 然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣. 已知办公楼 ...

随机推荐

  1. DeepWiki:AI驱动、免费且实用的 GitHub 源码阅读与分析神器!

    前言 GitHub 作为全球最大的代码托管平台,汇聚了无数开发者的智慧结晶,为各行各业的技术进步提供了宝贵的资源.然而,面对浩瀚如海的代码库,如何高效地阅读.理解和分析源码,成为了摆在众多开发者面前的 ...

  2. LinqHelper拓展

    public static class LinqHelper { //NHibernate.Hql.Ast.HqlBooleanExpression public static Expression& ...

  3. Gin 封装原生sql + jwt 实现 web

    最近工作之余学了一下 Go 语言, 在此之前是先学了一段时间的 rust, 真的是从入门到放弃, 根本搞不懂, 于是果断转 Go 了, 为啥不继续用 Java 呢, 就是觉得它很啰嗦, 代码量还大, ...

  4. Flutter视频压缩技术:如何在应用中优化视频文件的质量和大小?

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  5. LLM主要架构

    LLM本身基于Transformer架构 自2017年,Attention is all you need诞生起,原始的Transformer模型不同领域的模型提供了灵感和启发 基于原始的Transf ...

  6. 逆序对计数问题之C#实现(O(nlogn))

    逆序对计数问题是一个经典的算法问题,常见于计算机科学和数据结构领域.它的目标是计算数组中所有的逆序对的数量.逆序对是指数组中两个元素满足位置关系(i,j),且有 A[i]>A[j]. 它的应用有 ...

  7. css——慕课

  8. odoo里固定form表单上的header

    固定form表头header实现方式   修改全局样式:加个position: fixed;  即可 .o_form_view .o_form_statusbar { position: fixed; ...

  9. OAuth2密码模式:信任的甜蜜陷阱与安全指南

    title: OAuth2密码模式:信任的甜蜜陷阱与安全指南 date: 2025/05/29 14:56:19 updated: 2025/05/29 14:56:19 author: cmdrag ...

  10. Spring Boot 整合 JMS(Active MQ 实现)

          我们使用jms一般是使用spring-jms和activemq相结合,通过spring Boot为我们配置好的JmsTemplate发送消息到指定的目的地Destination.本文以点到 ...