[BZOJ 1150] 数据备份
2024-09-02 21:43:27
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1150
Solution:
思路和洛谷P1484完全相同
只不过将求最大不相邻的点权改为最大不相邻的边权
([P1484] 种树:http://www.cnblogs.com/newera/p/8977924.html)
但在边界条件上还是卡了好长时间,也许一开始我就理解错了
正解应该是将a[0]=INF,保证选过a[1]后绝不选a[2],因为a[1]在不影响剩余点的位置的前提下比a[2]更优
我一开始认为可以由a[1]转移到a[2],于是把left[0]=1
这明显是没有必要的,但为什么会WA?以后再看吧
Code:
#include <bits/stdc++.h> using namespace std;
#define F first
#define S second
typedef long long ll;
typedef pair<ll,int> P; const int MAXN=1e5+;
priority_queue<P,vector<P>,greater<P> > que;
int n,k,dat[MAXN],l[MAXN],r[MAXN],vis[MAXN];
ll d[MAXN],res=; int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++) scanf("%d",&dat[i]);
for(int i=;i<=n;i++)
l[i-]=i-,r[i-]=i,d[i-]=dat[i]-dat[i-],que.push(P(d[i-],i-)); d[]=d[n]=1e17; //边界处理
while(k--)
{
while(vis[que.top().S]) que.pop();
P t=que.top();que.pop();
res+=t.F;vis[l[t.S]]=vis[r[t.S]]=true; d[t.S]=t.F=d[l[t.S]]+d[r[t.S]]-d[t.S];que.push(t); l[t.S]=l[l[t.S]];r[t.S]=r[r[t.S]];
r[l[t.S]]=t.S;l[r[t.S]]=t.S;
} printf("%lld",res);
return ;
}
最新文章
- JS中误用/g导致的正则test()无法正确重复执行
- 操作系统开发系列—13.a.进程 ●
- 添加css的方式:link与@import区别
- Python全栈--7.3--模块补充configparser--logging--subprocess--os.system--shutil
- eclipse中的maven配置
- HTML5 Canvas渐进填充与透明
- Linux系统编程(5)——文件与IO之mmap函数
- 简单的CSS网页布局--三列布局
- Spark简述及基本架构
- 中位数的和_KEY
- (Python3) 运行结果 = 10,40 的困扰我一顿饭时间的 代码
- (已解决)Eclipsez中打不开c++文件,显示Editor could not be initialized.
- centos /data目录扩容
- arcgis pro2.3教程与问题集持续更新(一)
- NUC972裸机调试步骤
- python循环结构
- Centos7 安装单节点Torque PBS
- linux系统命令记录
- 51nod-1103-抽屉原理
- 文件 md5 查看 命令
热门文章
- JQuery队列queue与原生模仿其实现
- WordPress后台edit-tags.php里无限栏目分类实现
- WCF分布式开发步步为赢(13):WCF服务离线操作与消息队列MSMQ
- NOIP2016愤怒的小鸟 [状压dp]
- 【BZOJ2832&;&;3874】宅男小C [模拟退火][贪心]
- 【STSRM12】夏令营(分治决策单调+主席树)
- [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树
- Educational Codeforces Round 40 A B C D E G
- cygwin与vim配置
- vim 源码分析