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. Xshell如何连接

    Xshell如何连接

  2. 云小课 | “VPC连接”知多少

    摘要:华为云提供了丰富的网络服务,可满足多种网络互连场景. 同Region的两个VPC怎么连通?” “跨Region的两个VPC又怎么连通?” “VPC内的ECS搭建了一个应用,需要访问Interne ...

  3. React当中的路由使用

    React 当中的路由 使用React构建的单页面应用,要想实现页面间的跳转,首先想到的就是使用路由.在React中,常用的有两个包可以实现这个需求,那就是react-router和react-rou ...

  4. 微服务架构中的BFF到底是啥?

    在<技术中台与业务中台都是啥玩意>一文中留下一个问题:BFF是啥?为啥在API网关和业务中台之间加入了一层BFF?考虑到在实际工作中,我的大部分同事都问过这个问题,这里我也总结一下进行答复 ...

  5. C#-CLR note - 26线程

    开篇 async/wait的使用 static async Task Main(string[] args) { Console.WriteLine("start-- "); va ...

  6. winserver2008R2安装配置JDK+tomcat之坑

    记一次winserver安装jdk+tomcat 准备软件: jdk-8u241-windows-x64 apache-tomcat-8.5.46-windows-x64 一.安装java 1.安装j ...

  7. 计算机网络学习socket--day3

    1.REUSEADDR(地址重复利用) 1.REUSEADDR解决服务器关闭后重新绑定地址,在day3中知道服务器端必须绑定地址 2.服务器端尽可能使用REUSEADDR 3.在绑定之前尽可能调用se ...

  8. Python 3基础教程8-if else语句

    终于更新到了,教程8, 如果对python软件测试.接口测试.自动化测试.面试经验交流.感兴趣可以加君羊软件测试交流: 1079636098,还会有同行一起技术交流. 本文介绍if else语句,不多 ...

  9. GPO - Folder Mapping via GPO

    Create a Group Policy on AD DC Server. The GPO policy will come into effect on the next login, or us ...

  10. 【week1错题集】

    day9[2.f] # day9 题2.f ''' 有如下文件,t1.txt,里面的内容为: 葫芦娃,葫芦娃, 一根藤上七个瓜 风吹雨打,都不怕, 啦啦啦啦. 以r模式打开文件,从‘风吹雨打..... ...