LINK:数据备份

以前做过这种贪心 不过没有好好的证明 这次来严格的证明一下。

不难发现 最后的答案 选择的所有两对公司必然相邻。

所以排序后 把数组变成ai-ai-1. 这样问他的模型就是 n-1个数从中选出k个数 且任意两个数不能相邻 求和的最小值。

k==1时显然是全局最小值。

k==2的时候 有两种方法:全局最小值 和全局最小值不相邻的 最小数字。还有一种 把全局最小值扔了 选他们两边的数字。

此时 选出全局最小值之后把左右两边元素给去掉 因为这两个决策假了。

加入一个新决策 :两边元素之和-中间的元素。

然后可以发现 此时决策集合完全覆盖了我们上述的分析。

考虑拓展到k比较大的情况。

我们不断维护决策集合的完整性。而且对于每一个局面都是一样的。所以从递归来看这是正确的。

换个角度:从一个局面最优转到另一个局面 可以发现 此时如果我们选择了上次新决策那么符合我们前面的结论2.

如果选择了其他元素符合前面的结论1.

对于一个新局面来说其最优也是来自两个结论。

综上 做出的所有决策都是 结论1和结论2的一种 这对于所有的局面都是最优的选择 所以是正确的。

const int MAXN=100010;
int n,k;
ll ans;
int l[MAXN],r[MAXN];
ll w[MAXN];
ll a[MAXN];
multiset<pii>s;
multiset<pii>:: iterator it,itt,itt1;
int main()
{
//freopen("1.in","r",stdin);
get(n);get(k);
rep(1,n,i)get(a[i]);
sort(a+1,a+1+n);
rep(1,n-1,i)w[i]=a[i+1]-a[i],s.insert(mk(w[i],i)),l[i]=i-1,r[i]=i+1;
w[0]=inf;w[n]=inf;s.insert(mk(w[0],0));s.insert(mk(w[n],n));
while(k--)
{
it=s.begin();
ans+=(*it).F;
int x=(*it).S;
int L=l[x];
int R=r[x];
s.erase(it);
itt=s.find(mk(w[L],L));
s.erase(itt);
itt1=s.find(mk(w[R],R));
s.erase(itt1);
w[x]=w[R]+w[L]-w[x];
l[x]=l[L];r[x]=r[R];
r[l[L]]=x;l[r[R]]=x;
s.insert(mk(w[x],x));
}
putl(ans);
return 0;
}

ACwing 147 数据备份 贪心 set的更多相关文章

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

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

  2. 【apio2007】【ctsc2007】 数据备份 贪心+链表+堆

    题目大意:有n个点,k条链,每个点离原点有一定的距离.要你用k条链连接2k个点,使得k条链的长度最短. 首先每次肯定是链相邻的2个点,所以我们先把相邻2个点的差值求出来,得到有n-1个数的数列. 然后 ...

  3. 洛谷$P3620\ [APIO/CTSC 2007]$数据备份 贪心

    正解:贪心 解题报告: 传送门$QwQ$ $umm$感觉这种问题还蛮经典的,,,就选了某个就不能选另一个这样儿,就可以用堆模拟反悔操作 举个$eg$,如果提出了$a_i$,那就$a_{i-1}$和$a ...

  4. [luogu3620][APIO/CTSC 2007]数据备份【贪心+堆+链表】

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

  5. [APIO/CTSC 2007]数据备份(贪心+堆)

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

  6. 【BZOJ 1150】 1150: [CTSC2007]数据备份Backup (贪心+优先队列+双向链表)

    1150: [CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设 ...

  7. BZOJ_1150_[CTSC2007]数据备份Backup_堆+贪心

    BZOJ_1150_[CTSC2007]数据备份Backup_堆+贪心 Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏 ...

  8. BZOJ1150 [CTSC2007] 数据备份Backup 贪心_堆_神题

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

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

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

随机推荐

  1. HTML5(二)音频视频画布

    HTML5 Audio(音频) 定义和用法 <audio src="someaudio.wav" controls="controls"> 您的浏览 ...

  2. mongodb安装与mongo vue的使用

    首先,下载mongodb,然后安装 http://downloads.mongodb.com/win32/mongodb-win32-x86_64-enterprise-windows-64-2.6. ...

  3. 洛谷 P3627 [APIO2009]抢掠计划 Tarjan缩点+Spfa求最长路

    题目地址:https://www.luogu.com.cn/problem/P3627 第一次寒假训练的结测题,思路本身不难,但对于我这个码力蒟蒻来说实现难度不小-考试时肛了将近两个半小时才刚肛出来. ...

  4. POJ2393贪心

    题意:奶牛们收购了一家世界著名的酸奶工厂Yucky Yogurt. 在接下来的 N (1 <= N <= 10,000) 周,牛奶和人工的价格每周会波动,以致于第i周需要花公司 C_i ( ...

  5. python 爬虫:HTTP ERROR 406

    解决方法: 设置了Accept头后解决了,但是还是不知道原因 headers:{ Accept:"text/html, application/xhtml+xml, */*" }原 ...

  6. Django框架02 /Django下载安装、url路由分发

    Django框架02 /Django下载安装.url路由分发 目录 Django框架02 /Django下载安装.url路由分发 1. django下载安装 2. pycharm创建项目 3. 基于D ...

  7. bzoj2561最小生成树

    bzoj2561最小生成树 题意: 给定一个连通无向图,假设现在加入一条边权为L的边(u,v),求需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上. 题解: 最 ...

  8. Python+selenium+unittest+HTMLTestReportCN单元测试框架分享

    分享一个比较基础的,系统性的知识点.Python+selenium+unittest+HTMLTestReportCN单元测试框架分享 Unittest简介 unittest是Python语言的单元测 ...

  9. 洛谷 P5022 旅行

    今天换标题格式了,因为感觉原版实在有点别扭…… 还是直接上题板,看完题再讲吧: 对了有个小细节没说,m一定是等于n或者等于n-1的. 这题是2018年提高组的真题哦!被我肝了2天肝出来了,2天……(真 ...

  10. View Animation 运行原理解析

    Android 平台目前提供了两大类动画,在 Android 3.0 之前,一大类是 View Animation,包括 Tween animation(补间动画),Frame animation(帧 ...