p1484 种树

传送门

题目

cyrcyr今天在种树,他在一条直线上挖了n个坑。这n个坑都可以种树,但为了保证每一棵树都有充足的养料,cyrcyr不会在相邻的两个坑中种树。而且由于cyrcyr的树种不够,他至多会种k棵树。假设cyrcyr有某种神能力,能预知自己在某个坑种树的获利会是多少(可能为负),请你帮助他计算出他的最大获利。

输入格式:

第一行,两个正整数n,k。

第二行,n个正整数,第i个数表示在直线上从左往右数第i个坑种树的获利。

输出格式:

输出1个数,表示cyrcyr种树的最大获利。

分析

首先我们先考虑k=1的情况,则答案即为所有数的最大值。然后我们在考虑k=2的情况,这是我们有两种选择:1.在选择原本的所有数中的最大值ai的同时选一个与它不相邻的数aj;2.不选择ai,而选择ai-1和ai+1。我们推而广之便可以得到这个题的策略:每一次选堆中最大的元素,将以这个元素为中心的li和ri将会产生的影响放入堆中(因为以某点为中心可能不止向两侧扩展一次,所以要用lr数组记录),我们要注意每次产生的影响是ali+ari-ai,因为这样下一次选这两个点便可以将其上一次扩展的影响覆盖了。注意每一次扩展的lr要打一个标记以防止被以其他点为中心的点二次访问,每一次更新lr也要注意将其更新成lli和rri,因为某点的左右边界的点也可能扩展过。最后我们要注意如果哪一次堆顶元素为非正数就代表这之后任何扩展都不能给答案带来正效应了,直接跳出循环即可。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define f first
#define s second
long long a[600000],used[600000],l[600000],r[600000];
priority_queue<pair<long long,long long> >q;
inline void read(long long &x){long long f=1;x=0;char s=getchar();while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}while(s>='0'&&s<='9'){x=x*10+(s-'0');s=getchar();}x*=f;
}
int main()
{     long long n,m,i,j,k;read(n),read(m);for(i=1;i<=n;i++){read(a[i]);q.push(make_pair(a[i],i));l[i]=i-1;r[i]=i+1;}long long ans=0;while(m--){while(used[q.top().s])q.pop();long long x=q.top().f,y=q.top().s;q.pop();if(x<0)break;ans+=x;a[y]=a[l[y]]+a[r[y]]-x;used[l[y]]=used[r[y]]=1;l[y]=l[l[y]];r[l[y]]=y;r[y]=r[r[y]];l[r[y]]=y;q.push(make_pair(a[y],y));}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/yzxverygood/p/9135042.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dalsa线扫相机SDK开发-小试牛刀(1)

拿到了dalsa相机&#xff0c;可以用Sapera软件配置相机&#xff0c;进行图像采集。但是自己开发的话就得撸起袖子写代码了&#xff0c;查了两篇不错的博文&#xff0c;作为指导。 Sapera帮助文档 - 《好好先生》专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/liubing8609/a…

用FFMPEG SDK进行视频转码压缩时解决音视频不同步问题的方法(转) PTS DTS

用FFMPEG SDK进行视频转码压缩的时候&#xff0c;转码成功后去看视频的内容&#xff0c;发现音视频是不同步的。这个的确是一个恼火的事情。我在用FFMPEG SDK做h264格式的FLV文件编码Filter的时候就碰到了这个问题。经过研究发现&#xff0c;FFMPEG SDK写入视频的时候有两个地方…

深度学习环境搭建(GPU)CUDA安装(完全版)

文章目录1、查询电脑硬件2、环境搭建与软件安装1、安装CUDA运算平台软件2、安装cuDNN支持包3、配置环境变量3、验证CUDA与cuDNN安装前几天在看深度学习。因为对深度学习不是很了解&#xff0c;在配置环境时走了许多弯路&#xff0c;也总是战战兢兢的。现在对深度学习的环境搭建…

Linux 中的文件压缩与解压

.tar tar xvf FileName.tar # 解压 tar cvf FileName.tar DirName # 压缩 .gz gunzip FileName.gz # 解压 gzip -d FileName.gz # 解压 gzip FileName # 压缩 .tar.gz 和 .tgz tar zxvf FileName.tar.gz # 解压 tar zcvf FileName.tar.gz DirName # 压缩 .bz2 bzip2 -d FileNam…

Unity3D游戏开发之自由视角下的角色控制

秦元培的博客:http://blog.csdn.net/qinyuanpei/article/details/39125353 1&#xff0c;[Unity3D]Unity3D游戏开发之角色控制漫谈 2&#xff0c;[Unity3D]Unity3D游戏开发之自由视角下的角色控制 3&#xff0c;[Unity3D]Unity3D游戏开发之仿仙剑奇侠传角色控制效果 转载于:h…

Pycharm用鼠标滚轮控制字体大小

一、pycharm字体放大的设置 File —> setting —> Keymap —>在搜寻框中输入&#xff1a;increase —> Increase Font Size&#xff08;双击&#xff09; —> 在弹出的对话框中选择Add Mouse Shortcut 在弹出的对话框中同时按住ctrl键和鼠标滚轮向上滑。 二、…

Halcon自定义函数封装方法(全网最详细)

文章目录1、名词解释2、例子介绍1、处理原图与任务&#xff1a;2、代码与解析&#xff1a;3、Halcon函数封装方式①明确需求②选取函数部分进行函数创建&#xff0c;更改函数接口③运行验证与函数更改操作有网友说不太清楚这个halcon函数的封装方法。今天写个教程帖子&#xff…

ffmpeg库音频解码示例

#include <stdio.h> #include <stdlib.h> extern "C"{// #include "avcodec.h" #include "avformat.h" } int main(char arg,char *argv[]) { char *filename "02.swf"; av_register_all();//注册所有可…

SQL Where in list 问题

不过,这种做法有两个缺陷1.Oracle In列表的数目有限制(1000)2.不能复用执行计划,每次几乎都是硬解析.3.In拼接可能存在SQL注入的风险

readn writen实现linux下socket缓冲区读写

socket上的read write 操作不同与一般的文件IO操作&#xff0c;socket上的用read write读写的字节数可能比要求的少,但这并不是错误&#xff0c;原因是socket的缓冲区可能已经达到了极限。此时所需要的就是再次调用read write 以写入或输出剩余的字符。这种情况在socket中很常见…

傅里叶变换进行缺陷检测detect_indent_fft.hdev(源代码与详细解析)

文章目录简介程序解析处理结果预览算法讲解简介 detect_indent_fft.hdev是halcon的示例程序&#xff0c;是傅里叶变换进行缺陷检测的一个例子&#xff0c;主要是傅里叶变换在复杂背景下的缺陷检测。 这个程序展示了如何利用快速傅里叶变换&#xff08;FFT&#xff09;对塑料制…

lua环境搭建

前言 Linux & Mac上安装 Lua 安装非常简单&#xff0c;只需要下载源码包并在终端解压编译即可&#xff0c;本文介绍Linux 系统上&#xff0c;lua5.3.0版本安装步骤&#xff1a; Linux 系统上安装 [rootgitlab ~]# mkdir /app/tools/lua -p [rootgitlab ~]# cd /app/tools/l…

八、job管理

查看用法&#xff1a; [rootsuper65 ~]# salt-run -d|grep jobsjobs.active:                      #查看当前执行的job Return a report on all actively running jobs from a job id centric salt-run jobs.activejobs.list_job: salt-run jobs.list_j…

pthread_join/pthread_exit用法实例

函数pthread_join用来等待一个线程的结束。函数原型为&#xff1a;   extern int pthread_join __P ((pthread_t __th, void **__thread_return));   第一个参数为被等待的线程标识符&#xff0c;第二个参数为一个用户定义的指针&#xff0c;它可以用来存储被等待线程的返回…

thinkphp5 内置接口开发与使用

最近的一个项目在用tp5&#xff0c;对于tp3都几乎没用过的我来说~~~ tp5最好的一点就是对接口的单独封装&#xff0c;只要严格按照要求一步一步来就可以成功了 开启命令行&#xff1a;配置环境变量安装tp5项目cmd进入项目目录&#xff0c;运行php think&#xff0c;出现如下内容…

Halcon2019软件安装教程

文章目录1、halcon介绍2、安装halcon-19.11.0.0-windows.exe1、下载halcon-19.11.0.0-windows.exe安装包2、halcon-19.11.0.0-windows.exe软件安装3、验证Halcon安装1、halcon介绍 HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包&#xff0c;拥有应用广泛的机器视…

爬虫常用库的安装

请求库(requests,selenium)、解析库(beautifulsop)、存储库、工具库等 urelib re 上面这两个是python自带的库 需要自己安装额库&#xff1a; (在windows下&#xff0c;使用pip install 命令) requests selenium用来驱动浏览器&#xff0c;做自动化测试&#xff0c;一些被js…

Python: 编程遇到的一些问题以及网上解决办法?

0.Python: TypeError: str does not support the buffer interface,(点我) fp.write(url.encode("utf-8")) 1.Python:object of type Response has no len()&#xff0c;如何解决&#xff1f;(点我) Traceback (most recent call last):File "F:/Python/TD.py&q…

快排简要介绍

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>Title</title></head> <body> <script> var arr [6,10,2,9,3,8,11,4,5]; function quickSort(data, start, end) { // 确定要…

在django中使用celery

前言: 针对高延时任务, 直接在一次网络请求中处理完毕会导致很不好的体验, celery则可以不阻塞请求后台处理这些任务, 并且可以使用django的models进行数据库操作.环境 python models: celery-4.1.1redis-2.10.6django-1.11.7其他: redis-3.2.9macospython3.6创建django工程 dj…