思路很妙啊。

我一开始就在想DP,但是时间必挂。

膜了题解才发现原来是贪心。首先如果没有限制左右不能选,那就很简单,那现在的做法就是给他一个反悔的机会

比如数列9 10 8 -1

那贪心一开始就选10,这时把数列变成:9+8-10 -1 = 7 -1

那么下一次选的就是7,相当于减的10抵消而选了9、8

那么用链表维护左右,用优先队列排序就行了。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
struct node
{int id,d;
}a[210000];
struct cmd
{bool operator()(node n1,node n2){return (n1.d==n2.d)?(n1.id<n2.id):(n1.d<n2.d);}
};
priority_queue<node,vector<node>,cmd>q,d;
int c[210000],l[210000],r[210000];
int main()
{int n,m;scanf("%d%d",&n,&m);if(n/2<m){printf("Error!\n");return 0;}for(int i=1;i<=n;i++){scanf("%d",&c[i]);a[i].id=i;a[i].d=c[i];q.push(a[i]);l[i]=i-1;if(l[i]==0)l[i]=n;r[i]=i+1;if(r[i]==n+1)r[i]=1;}int ans=0;for(int i=1;i<=m;i++){node n1,n2;while(1){n1=q.top();if(d.empty()==true){q.pop();break;}n2=d.top();if(n1.d==n2.d&&n1.id==n2.id){q.pop();n1=q.top();if(d.empty()==true)break;d.pop();n2=d.top();}else {q.pop();break;}}ans+=n1.d;int L=l[n1.id],R=r[n1.id];node de;de.id=L,de.d=c[L];d.push(de);de.id=R,de.d=c[R];d.push(de);node in;in.id=n1.id,in.d=c[L]+c[R]-n1.d;q.push(in);c[n1.id]=c[L]+c[R]-n1.d;l[n1.id]=l[L];r[l[L]]=n1.id;r[n1.id]=r[R];l[r[R]]=n1.id;}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/AKCqhzdy/p/8643000.html

bzoj2151: 种树相关推荐

  1. [BZOJ2151]种树

    同1150 每次取最大,然后把val[l]+val[r]-val[now]放入堆中 /********************************************************* ...

  2. 【BZOJ2151】种树,贪心+Splay乱搞

    Time:2016.08.29 Author:xiaoyimi 转载注明出处谢谢 传送门 模拟题之一 我真不知道怎么证明的 考试的时候纯粹是胡思乱想啊啊啊 具体做法就是把这n个数摆成一个环,记录每个数 ...

  3. 【bzoj2151】种树

    题面 传送门 传送门2 题解 如果没有相邻限制的话,我们开一个大根堆每一次取最大的就行了,但是如果存在限制,我们就加入一个后悔操作,来做调整贪心. 首先如果我们选择了一个点i,那么其相邻的点i−1,i ...

  4. 华华和月月种树(牛客)

    题意: 华华看书了解到,一起玩养成类的游戏有助于两人培养感情.所以他决定和月月一起种一棵树.因为华华现在也是信息学高手了,所以他们种的树是信息学意义下的. 华华和月月一起维护了一棵动态有根树,每个点有 ...

  5. BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...

  6. 宏基因组合种树第292期—侧柏、樟子松,为祖国绿化做贡献

    宏基因组蚂蚁森林公益合种团队.现诚招队友,带你3000~5000g能量种10~20万能量大树,每天浇水一千,每种树循环种.热爱种树.保证支付宝每天10点前浇水1000g,无水可自行退出,未按时浇水即被 ...

  7. 宏基因组合种树第290期—油松

    宏基因组蚂蚁森林公益合种团队.现诚招队友,带你3000~5000g能量种10~20万能量大树,每天浇水一千,每种树循环种.热爱种树.保证支付宝每天10点前浇水1000g,无水可自行退出,未按时浇水即被 ...

  8. 宏基因组合种树第285期,胡杨专车

    宏基因组蚂蚁森林公益合种团队.现诚招队友,带你3000~5000g能量种10~20万能量大树,每天浇水一千,每种树循环种.热爱种树.保证支付宝每天10点前浇水1000g,无水可自行退出,未按时浇水即被 ...

  9. 宏基因组蚂蚁森林公益合种树项目,支持祖国绿化事业,让世界更美好

    宏基因组蚂蚁森林公益合种团队.现诚招队友,带你3000~5000g能量种10~20万能量大树,每天浇水一千,每种树循环种.热爱种树.保证支付宝每天10点前浇水1000g,无水可自行退出,未按时浇水即被 ...

  10. 宏基因组合种树,2-4天领证

    很多朋友都在支付宝里面玩过蚂蚁森林,为大家支持中国绿化公益事业的行动点赞. 有没有羡慕小伙伴满满的植树证书,也希望自己为绿化做贡献,但又感觉自己的力量太渺小. 现在机会来了,宏基因组公众号发起的合种树 ...

最新文章

  1. javascript知识点
  2. python第五章课后题答案超星_MOOC网课章节答案_Python 语言程序设计见面课测试答案...
  3. 数据采集录入填报时如何只更新当前修改行
  4. spring依赖日志_Spring:设置日志记录依赖项
  5. C Primer Plus 第7章 C控制语句:分支和跳转 7.4 一个统计字数的程序
  6. 计算机动漫设计VR主要学什么,VR动漫制作怎么学?
  7. 【讲师专访】Oracle ACE 总监侯圣文:不懂开发的运维终将被淘汰
  8. HDU-3537 Mock Turtles型翻硬币游戏
  9. elk日志收集系统 linux_ELK 日志分析系统
  10. 【bzoj3456】城市规划(多项式求逆+dp)
  11. 超详细电脑安装win10专业版
  12. 博弈论——完全信息博弈
  13. 区块链+农业开启智能化生产时代 解决世界性食品及粮食安全问题
  14. Tkinter保姆级教程(上)
  15. docker: error pulling image configuration
  16. 服务器cpu 单核过高的影响,一次单核CPU占用过高问题的处理
  17. java垃圾回收机制分类整理
  18. Power BI 关于日期显示格式的那些事儿
  19. 鸿蒙生态的2021:像犀牛在丛林飞
  20. VM上linux突然断网解决办法

热门文章

  1. 电瓶车续航测试软件,【电驹视频】实测13款电动车真实续航,最靠谱的竟然是它……...
  2. C# 创建进程但是失败,原因是什么
  3. Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
  4. php推送mip示例,首页—mip推送软件—首页
  5. windows 10卸载(注销)WSL,注销(卸载)当前安装的Linux的Windows子系统
  6. Windows创建新账户进行登录
  7. 三进制计算机_要做一个编程界优秀的攀登者,首先要认真计算机中的0和1
  8. 【渝粤教育】国家开放大学2018年秋季 0689-21T老年心理健康 参考试题
  9. 经典机器学习系列(十)【变分推断】
  10. 求解偏微分方程开源有限元软件deal.II学习--Step 8