P3620 数据备份 题解
数据备份 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 [i]\),实现替换
如果当前 k=3 ? 已然在 k=2 时候选择
\]
现在想要换成;\(a [i-2]+a [i]+a [i+2]\),只需在 k=2 决策时压入
\]
这个方法保证了大问题和小问题的求解方法相同
豆包提供格式整理
P3620 数据备份 题解的更多相关文章
- 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)
		
洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...
 - BZOJ1150:[APIO/CTSC2007]数据备份——题解
		
https://www.lydsy.com/JudgeOnline/problem.php?id=1150 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的 ...
 - 洛谷 [P3620] 数据备份
		
贪心神题 首先我们发现一个显然的贪心策略,连接相邻两个写字楼总是更优. 所以本题就变成了数轴上一堆点,要选 k 个彼此不相邻的区间,使得区间长度最小 对于 10000 的数据来说,我们可以用 DP 解 ...
 - 洛谷P3620 数据备份
		
好吧,我一开始说这是个神级数据结构毒瘤题,后来改成神题了. 主要是贪心做法的巧妙转化: 首先发现选择的一对必须相邻,于是我们搞出差分. 然后考虑选取最小值时,最小值两侧的数要么同时选,要么都不选. 然 ...
 - P3620 [APIO/CTSC 2007]数据备份
		
P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...
 - 洛谷 P3620 [APIO/CTSC 2007]数据备份 解题报告
		
P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...
 - 题解:[APIO/CTSC 2007]数据备份
		
你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣.已 ...
 - 洛谷P3620 [APIO/CTSC 2007] 数据备份 [堆,贪心,差分]
		
题目传送门 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽 ...
 - P3620 [APIO/CTSC 2007]数据备份[优先队列+贪心]
		
题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...
 - 数据备份[APIO/CTSC 2007]题解
		
题目描述 你在一家IT公司为大型写字楼或办公楼的计算机数据做备份. 然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣. 已知办公楼 ...
 
随机推荐
- 一行代码搞定防抖节流:JavaScript新特性解析
			
防抖(Debounce)和节流(Throttle)是两种前端开发中常用的性能优化技术,尤其在处理高频触发事件如滚动.调整窗口大小.输入等场景中.传统实现这些功能需要编写复杂的函数,但随着JavaScr ...
 - 如何用IDEA 生成JavaDoc新版
			
用IDEA生成JavaDoc 左上角四横杠点击,唤出工具栏(快捷键 alt+\) 左键单击工具选项 下拉框选 生成Javadoc 在弹出框选好参数立刻导出啦 1.JavaDoc 作用域: 选要导出的文 ...
 - 为何PostgreSQL没有聚集索引?解读两大数据库的设计差异
			
为何PostgreSQL没有聚集索引?解读两大数据库的设计差异 前言 高效的数据检索是数据库管理的基石, PostgreSQL和SQL Server都能提供强大的数据访问方法以支持各种工作负载方面表现 ...
 - 用bat脚本启动和停止系统服务,如oracle等
			
启动脚本 启动oracle.bat :: 取得管理员权限 :Main @echo off cd /d "%~dp0" cacls.exe "%SystemDrive%\S ...
 - CSP-S 2020模拟训练题1-信友队T2 挑战NPC
			
题意简述 有一个\(k\)维空间,每维的跨度为\(L\),即每一维的坐标只能是\(0,1, \cdots ,L-1\).每一步你可以移动到任意一个曼哈顿距离到自己小于等于\(d\)的任意一个合法坐标. ...
 - MAC系统13.2,安装最新版logi options+,打开一直转圈
			
我联系官网客服,按照他给的步骤成功的安装了options+,你试试 请抽出时间按照下面列出的故障排除步骤尝试解决问题. 卸载我们所有的软件 删除剩余文件 步骤 1:打开 Finder,在菜单栏中选择& ...
 - 【目录】【中文】【deplearning.ai】【吴恩达课后作业目录】
			
[目录][吴恩达课后作业目录] 吴恩达深度学习相关资源下载地址(蓝奏云) 课程 周数 名称 类型 语言 地址 课程1 - 神经网络和深度学习 第1周 深度学习简介 测验 中英 传送门 无编程作业 编程 ...
 - Kubernetes如何通过StatefulSet支持有状态应用?
			
Kubernetes如何通过StatefulSet支持有状态应用? 为什么Deployment不能编排所有类型应用? Deployment认为一个应用中所有的Pod是完全一样的,所以他们之间没有顺序, ...
 - android input
			
通常,从EditText中获取字符串很简单: EditText text = findViewById(R.id.textName); String name = text.getText ...
 - C# 与低代码平台的融合:以活字格为例的 Web API 开发实践
			
引言 在当今软件开发领域,低代码平台凭借其高效.便捷的特性逐渐成为开发的主流趋势.而 C# 作为一种功能强大的编程语言,在服务端开发中有着广泛的应用.将 C# 与低代码平台相结合,能够充分发挥两者的优 ...
 
			
		