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

已知办公楼都位于同一条街上。你决定给这些办公楼配对(两个一组)。每一对办公楼可以通过在这两个建筑物之间铺设网络电缆使得它们可以互相备份。

然而,网络电缆的费用很高。当地电信公司仅能为你提供 K 条网络电缆,这意味着你仅能为 K 对办公楼(或总计 2K 个办公楼)安排备份。任一个办公楼都属于唯一的配对组(换句话说,这 2K 个办公楼一定是相异的)。

此外,电信公司需按网络电缆的长度(公里数)收费。因而,你需要选择这 K对办公楼使得电缆的总长度尽可能短。换句话说,你需要选择这 K 对办公楼,使得每一对办公楼之间的距离之和(总距离)尽可能小。

下面给出一个示例,假定你有 5 个客户,其办公楼都在一条街上,如下图所示。这 5 个办公楼分别位于距离大街起点 1km, 3km, 4km, 6km 和 12km 处。电信公司仅为你提供 K=2 条电缆。

Solution

通过观察我们发现最优解只可能是两个相邻的点。

问题转化成了给一些点,选出其中m个使他们在互不相邻的前提下权值和最小。

这让我想到了一道题叫种树,然后发现一毛一样2333。

考虑选择一个点后,两边都不能选了,但最优解有可能属于两边。

我们从堆里取出最小的点,把两边的点删掉,用两边的点权之和减去当前点的权值最为这个点的权值放进堆里,继续贪心。

为什么这样是对的,因为当我贪心的选择了一个点后,两边的点要么都选,要么都不选,如果只选一个,还不如只选中间点呢。

注意因为要取最小值,所以注意判一下边界。

Code

#include<iostream>
#include<cstdio>
#include<queue>
#define mm make_pair
#define N 100002
using namespace std;
priority_queue<pair<long long,int> >q;
int n,k,l[N],r[N];
long long ans,a[N];
bool ji[N];
int main(){scanf("%d%d",&n,&k);for(int i=1;i<=n;++i)scanf("%d",&a[i]);n--;for(int i=1;i<=n;++i){a[i]=a[i+1]-a[i],q.push(mm(-a[i],i));l[i]=i-1;r[i]=i+1;}a[0]=a[n+1]=0x7f7f7f7f; for(int i=1;i<=k;++i){ int x=q.top().second,y=q.top().first;q.pop();while(ji[x]){x=q.top().second;y=q.top().first;q.pop();}ans-=y;a[x]=a[l[x]]+a[r[x]]-a[x];q.push(mm(-a[x],x));ji[l[x]]=ji[r[x]]=1;l[x]=l[l[x]];r[l[x]]=x;r[x]=r[r[x]];l[r[x]]=x;}cout<<ans;
} 

转载于:https://www.cnblogs.com/ZH-comld/p/9590804.html

[APIO/CTSC 2007]数据备份(贪心+堆)相关推荐

  1. [APIO / CTSC2007]数据备份 --- 贪心

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

  2. 专题突破二之优先队列、st表——,Running Median,Sequence,Buy Low Sell High,数据备份,超级钢琴,ZQC的手办

    文章目录 Running Median Sequence Buy Low Sell High [APIO/CTSC 2007] 数据备份 [NOI2010] 超级钢琴 「LibreOJ β Round ...

  3. 洛谷 P3620 - P3621 数据备份、风铃、动物园(APIO 2007)

    洛谷 P3620 - P3622 数据备份.风铃.动物园(2007 APIO) P3620 数据备份 题目描述: 思路: 我们先来将这道题简化一下: 将每一对相邻的建筑之间的空地看作一个点,点的权值即 ...

  4. BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表

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

  5. [bzoj2288][pojChallenge]生日礼物【贪心+堆+链表】

    题目描述 ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, -, AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物. 自然地,ftiasch想要知 ...

  6. 论地震、雷击和个人数据备份

    (本帖在版工的台湾旧 Blog 中,发表日期为 2007/09/08) 昨天 (2007/09/07) 凌晨 1:51,台湾发生规模很大的地震,当晚某新闻台又报导,有专家宣称,因余震异常的少,半年内台 ...

  7. 数据安全与数据备份存储技术(转)

    数据安全与数据备份存储技术(转)[@more@] 随着国内各行业信息系统的快速发展,特别是银行.证券.保险等行业大集中速度的加快,企业的技术风险也相对集中.一旦发生灾难,则将导致企业所有分支机构.营业 ...

  8. 基于NAS存储的数据备份解决方案

    基于NAS存储的数据备份解决方案 交流: [email]wmx@eisoo.com[/email] MSN : [email]wmx@eisoo.com[/email] 一.  背景 据统计 60% ...

  9. 数据备份 linux,linux下的数据备份

    制定备份策略 将原始设备转储到文件,或从文件恢复原始设备 执行部分备份和手工备份 检验备份文件的完整性 从备份部分地或完全恢复文件系统 完善的备份是系统管理的必要部分,但是决定对什么进行备份以及何时和 ...

最新文章

  1. Java案例——字符串拼接
  2. MySQL5.7新特性:lossless replication 无损复制
  3. Exchange Server 2016管理系列课件05.邮件转发功能
  4. 您需要了解的几个XHTML标签
  5. 计算机考试400,400作文:电脑考试
  6. PHP+SQLite3简约网址导航、书签管理器网站源码
  7. mysql csv存储引擎_2.2 mysql存储-CSV存储引擎
  8. Docker学习总结(42)——Docker Compose 入门学习
  9. 春运车票为谁“秒空”?第三方软件的困与危
  10. Java基础之字符串详细比较
  11. vscode 不能运行h5c3代码_Golang安装与环境搭建并在VSCode里面输出HelloWord
  12. 面向对象之需求分析要略
  13. OpenCV从源码安装到Ubuntu16.04
  14. 【Spring揭秘】Spring简介
  15. springboot呼伦贝尔旅游网站的设计与实现毕业设计源码091833
  16. Nodejs获取微信签名并使用JSSDK
  17. 秦皇岛自驾三日游攻略
  18. 短线王的盯盘宝怎么样_股票盯盘系统app怎么样
  19. Python读取tsv文件数据
  20. WPF的介绍和XAML语言

热门文章

  1. iOS  Emoji表情编码/解码
  2. 手持移动扫描终端 PDA移动开单系统-批发零售管理
  3. hdu 2570 贪心
  4. 中文字串截取无乱码的问题
  5. 碰撞检测技术:kd tree
  6. 选择日期保存后日期变成前一天(avue date)
  7. tomcat内存溢出,修改设置
  8. 已知矩阵 matlab,在MATLAB中,已知矩阵A,那么A(:,2:end)表示
  9. oracle数据库生产,从安装系统到oracle数据库生产环境(centos6.8)搭建
  10. 为什么不敢和别人竞争_净空法师开示:学老实,在社会上不能跟人竞争吗? - 如是我闻佛教网...