luogu P3620 [APIO/CTSC 2007]数据备份
首先如果一条线不是了连接的相邻两个位置一定不优,把它拆成若干连接相邻位置的线.所以现在问题是有\(n\)个物品,选\(k\)个,要求选的位置不能相邻,求最小总和
如果没有选的位置不能相邻这个限制,那就每次选最小的.现在仍然考虑每次选最小的,但是会有情况是这一次取的位置不在最优方案中,那么如果是这种情况,那么一定是要把不选这个东西,选旁边两个东西.考虑保留这个决策的选择,每选一个数\(x\),就把它旁边两个数\(y,z\)和\(x\)合并成\(y+z-x\).然后所有数可以堆维护,前驱后继可以链表维护
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double
using namespace std;
const int N=1e5+10;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,kk,ft[N],nt[N];
LL ans;
struct node
{
LL x,i;
bool operator < (const node &bb) const {return x!=bb.x?x>bb.x:i>bb.i;}
bool operator == (const node &bb) const {return x==bb.x&&i==bb.i;}
}a[N];
bool ban[N];
void del(int x)
{
nt[ft[x]]=nt[x],ft[nt[x]]=ft[x];
ban[x]=1;
}
struct HEAP
{
priority_queue<node> q1;
void mntn(){while(!q1.empty()&&(ban[q1.top().i]||!(q1.top()==a[q1.top().i]))) q1.pop();}
void push(node x){q1.push(x);}
void pop(){mntn();q1.pop();}
node top(){mntn();return q1.top();}
}hp;
int main()
{
n=rd()-1,kk=rd();
nt[0]=1;
for(int i=1;i<=n+1;++i) ft[i]=i-1,nt[i]=i+1;
int las=rd();
for(int i=1;i<=n;++i)
{
int x=rd();
a[i]=(node){x-las,i};
las=x;
hp.push(a[i]);
}
a[0]=(node){1ll<<40,0},hp.push(a[0]);
a[n+1]=(node){1ll<<40,0},hp.push(a[n+1]);
while(kk--)
{
int x=hp.top().i;
hp.pop();
ans+=a[x].x;
int y=ft[x],z=nt[x];
a[x].x=a[y].x+a[z].x-a[x].x;
hp.push(a[x]);
del(y),del(z);
}
printf("%lld\n",ans);
return 0;
}
luogu P3620 [APIO/CTSC 2007]数据备份的更多相关文章
- P3620 [APIO/CTSC 2007]数据备份
P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...
- 洛谷 P3620 [APIO/CTSC 2007]数据备份 解题报告
P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...
- 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)
洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...
- 洛谷P3620 [APIO/CTSC 2007] 数据备份 [堆,贪心,差分]
题目传送门 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽 ...
- P3620 [APIO/CTSC 2007]数据备份[优先队列+贪心]
题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...
- 洛谷P3620 [APIO/CTSC 2007] 数据备份
题目 贪心+堆. 一般贪心题用到堆的时候都会存在一种反悔操作,因此这个题也不例外. 首先电缆一定是连接两个相邻的点的,这很好证明,其次一个点只能被一条电缆连接,所以我们通过选这个电缆,不选相邻电缆和选 ...
- 洛谷$P3620\ [APIO/CTSC 2007]$数据备份 贪心
正解:贪心 解题报告: 传送门$QwQ$ $umm$感觉这种问题还蛮经典的,,,就选了某个就不能选另一个这样儿,就可以用堆模拟反悔操作 举个$eg$,如果提出了$a_i$,那就$a_{i-1}$和$a ...
- 题解:[APIO/CTSC 2007]数据备份
你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣.已 ...
- [luogu3620][APIO/CTSC 2007]数据备份【贪心+堆+链表】
题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...
随机推荐
- 【编程漫谈】用JAVA画多边形
一门语言只要带图形库就可以编程画图了,用JAVA画图有两种方式,一是在内存中画好然后生成图片,就可以看到画图的效果了.另一个就是在窗口界面上直接画,可以实时看到程序的运行效果.刚开始学编程的时候,我加 ...
- mysql删除数据库所有表
-- 生成删除xxx数据库的所有表的sql语句SELECT CONCAT('drop table ',table_name,';') FROM information_schema.`TABLES` ...
- ccf 201703-4 地铁修建(95)(并查集)
ccf 201703-4 地铁修建(95) 使用并查集,将路径按照耗时升序排列,依次加入路径,直到1和n连通,这时加入的最后一条路径,就是所需要修建的时间最长的路径. #include<iost ...
- java 百度地图判断两点距离2
package baiduApi; public class BaiDuMap { static double DEF_PI = 3.14159265359; // PI static double ...
- python|爬虫东宫小说
2k小说网爬取最近大火的<东宫>小说,借鉴之前看过的一段代码,修改之后,进行简单爬取. from urllib import requestfrom bs4 import Beautifu ...
- 性能测试之JMeter远程模式
性能测试之JMeter远程模式 事实上,你的JMeter客户端机器是不能表现出完美的压力请求,来模拟足够多的用户或由于网络限制去向服务施加压力,一种解决方法是通过一个JMeter去控制多个/远程JMe ...
- MySQL 将 字符串 转为 整数
MySQL 将 字符串 转为 整数 1.CAST(epr AS type) 1)type 为 SIGNED " AS SIGNED); 效果如下: 2)type 为 UNSIGNED &qu ...
- 爬取网贷之家平台数据保存到mysql数据库
# coding utf-8 import requests import json import datetime import pymysql user_agent = 'User-Agent: ...
- office web apps安装部署,配置https,负载均衡(二)域控制器安装并配置域账号
域控制器对服务器的要求不高,我们这里以windows server 2008R2为例 系统要求:windows server 2008R2 笔者也尝试使用了windows server 2012R2, ...
- app测试自动化之混合APP(之前的三篇为原生APP的操作)
混合开发的App中,经常会有内嵌的H5页面:定位方法与原生APP不同,需要上下文切换 #获取所有上下文contexts=dr.contextsprint(contexts)#打印当前上下文(有点问题应 ...