洛谷P1484.种树

洛谷P1484.种树

题目解析及思路

题目要求在一条n个坑的路上,对于已知每个坑种树的收益,并且相邻两个坑不能同时种树的情况下,求最大收益

思考一个小范围的例子(不考虑数组全负数):

  • 当m = 1时,答案一定为数组中的最大数,假设为a[i]
  • 当m = 2时,答案有两种情况:1.仍取a[i],且再取一个其他不相邻的元素
    2.不取a[i],改为取a[i-1]和a[i+1](同取或同不取)

因此可以用一个堆将所有数据加入,如果k=1时最优解为a[i],那么我们便可以把a[i-1]和a[i+1]进行合并

同时将a[i]改成a[i-1]+a[i+1]-a[i],继续找最大的,直到最大值<=0或取完k个

**反悔贪心:**因为a[i-1]+a[i+1] > a[i]时,我们要取a[i-1]和a[i+1]而不是a[i],因此在改为a[i-1]+a[i+1]-a[i]时,如果再取到a[i-1]+a[i+1]-a[i],a[i-1]+a[i+1]-a[i] + a[i] = a[i-1]+a[i+1] 可以实现找更优情况

参考题解

代码

#include<bits/stdc++.h>using namespace std;
#define PII pair<int, int>
typedef long long LL;
const int N = 300010;bool st[N];
//lr分别存左右两边的下标,更新方式参考链表
int l[N],r[N],a[N];
//优先队列存对组,记录下标
priority_queue<PII> q;
LL n,m,res;int main()
{cin>>n>>m;for(int i=1;i<=n;i++){//优先队列存对组,记录下标scanf("%d", &a[i]);q.push(make_pair(a[i],i));//记录左右下标l[i] = i-1,r[i] = i+1;}//哨兵r[0] = 1,l[n+1] = n;while(m --){//左右两边的元素被去掉了不遍历while(st[q.top().second])q.pop();PII tmp = q.top();q.pop();if(tmp.first <= 0) break;res += tmp.first;//取当前下标int pos = tmp.second;//把反悔值改进来a[pos] = a[l[pos]] + a[r[pos]] - a[pos];tmp.first = a[pos];//把两边去掉,标记成truest[l[pos]] = st[r[pos]] = 1;//更新左右"链表"l[pos] = l[l[pos]], r[l[pos]] = pos;r[pos] = r[r[pos]], l[r[pos]] = pos;q.push(tmp);}cout<<res<<endl;
}

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

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

相关文章

MySQL 8.4修改user的host属性值

MySQL 8.4修改user的host属性值 update mysql.user set host localhost where user mysql用户名; MySQL 8.4修改初始化后的默认密码-CSDN博客文章浏览阅读804次&#xff0c;点赞6次&#xff0c;收藏11次。先下载mysql的zip压缩包&#xff1a;MySQL :: Download MySQL Communi…

贪心day1

文章目录 前言雪糕的最大数量重新分装苹果装满石头的背包的最大数量K 次取反后最大化的数组和不同整数的最少数目 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;文章题目大多来自于 leetcode&#xff0c;当然也可能来自洛…

51、AVR、ARM、DSP等常用芯片之对比

51芯片 51芯片通常指的是基于8051内核的单片机&#xff0c;这是一种经典的微控制器&#xff08;MCU&#xff09;。虽然关于51芯片的详细现代应用和发展可能因具体型号和厂商而有所不同&#xff0c;但基于8051内核的单片机通常具有以下特点&#xff1a; 结构经典&#xff1a;8…

STL-string

STL的六大组件&#xff1a; string // string constructor #include <iostream> #include <string> using namespace std; int main() {// 构造std::string s0("Initial string");std::string s1; //nullptrstd::string s2("A character sequenc…

【在Linux世界中追寻伟大的One Piece】Jsoncpp|序列化

目录 1 -> Jsoncpp 1.1 -> 特性 1.2 -> 安装 2 -> 序列化 3 -> 反序列化 4 -> Json::Value 1 -> Jsoncpp Jsoncpp是一个用于处理JSON数据的C库。它提供了将JSON数据序列化为字符串以及从字符串反序列化为C数据结构的功能。Jsoncpp是开源的&#xf…

RHCSA复习题

第一~七章 1.创建以下目录和文件结构&#xff0c;并将/yasuo目录拷贝4份到/目录下。 [rootlocalhost ~]# mkdir /yasuo [rootlocalhost ~]# mkdir /yasuo/dir1 [rootlocalhost ~]# cd /yasuo/dir1 [rootlocalhost dir1]# touch hostname hostname02 passwd ssh_config sshd [r…

深度学习:模型攻击(Model Attack)详解

模型攻击&#xff08;Model Attack&#xff09;详解 模型攻击通常指在机器学习和人工智能领域中&#xff0c;故意设计的行为或方法&#xff0c;旨在操纵或欺骗机器学习模型的输出。这类攻击可能导致模型做出错误的决策或泄露敏感信息&#xff0c;对于安全性至关重要的应用&…

F5-TTS开源项目详解:非自回归语音合成技术革新与应用场景

在现代科技的推动下&#xff0c;语音合成技术取得了长足的进步。随着越来越多的场景开始依赖语音交互&#xff0c;如何高效、自然地生成语音成为了行业的一个重要课题。今天我们要讨论的是一个在语音合成领域备受瞩目的开源项目——F5-TTS。它不仅采用了非自回归架构&#xff0…

Arduino配置ESP32环境

Arduino配置ESP32环境 引言一、IDE下载教程操作取巧方法 二、社区安装包三、官方手动安装 引言 最近入手了一款ESP32-C3的开发板&#xff0c;想继续沿用现有Arduino IDE&#xff0c;网上看了很多方法&#xff0c;大致分了三类&#xff1a;IDE下载、社区安装包、github手动配置…

tcl/perl 脚本命令学习

记录日常遇到的命令 目录 记录日常遇到的命令 1 sed -i 2 cat 3 $ 参数 1 sed -i &#xff08;1&#xff09;sed -i s/\.\.\/\.\.\//\.\.\//g design.f 含义 命令 sed -i s/\.\.\/\.\.\//\.\.\//g design.f 使用 sed 编辑器来直接修改文件 design.f 中的内容。具体来说&…

面试篇:(二)Vue -2024 年前端面试技巧与面试题汇总

Vue -2024 年前端面试技巧与面试题汇总 在前端面试中&#xff0c;Vue.js 作为最受欢迎的前端框架之一&#xff0c;常常是面试中的重要考点。本篇文章将针对 Vue 的常见面试题进行详细解答&#xff0c;并为每个问题提供详细的回答技巧&#xff0c;帮助面试者深入理解 Vue 核心知…

南京邮电大学电工电子A实验十一(数据选择器及逻辑电路的动态测试)

文章目录 一、实验报告预览二、Word版本报告下载 一、实验报告预览 二、Word版本报告下载 点我

2.Java--入门程序

一、开发Java程序 步骤&#xff1a; 1.编写代码 其中第一行的HelloWorld叫类名&#xff0c;下面的框架叫main()方法&#xff0c; 类名要和文件名一致&#xff0c; 2.编译代码 用Javac进行编译&#xff0c;将编写的代码保存之后&#xff0c;打开WindowsR输入cmd 用cd文件夹…

rom定制系列------小米6x_澎湃os1.0.28安卓13定制固件修改 刷写过程与界面预览

&#x1f49d;&#x1f49d;&#x1f49d; 在接待很多定制化系统过程中。小米6x机型为很多工作室客户使用。但官方低版本固件无法适应新应用的使用。有些第三方固件却可以完美解决。此固件是客户分享的卡刷固件。需要修改为可以批量刷写的线刷固件。去除一些内置应用。需要自带…

Spring使用注解进行依赖注入

一、原则 不要把选择留给Spring 二、Autowired&#xff08;Spring注解&#xff09; 流程图&#xff1a; Spring依赖注入-Autowired 截图&#xff1a; 三、Resource&#xff08;JDK注解&#xff09; 流程图&#xff1a; Spring依赖注入-Resource 截图&#xff1a;

Docker-Harbor概述及构建

文章目录 一、Docker Harbor概述1.Harbor的特性2.Harbor的构成 二、搭建本地私有仓库三、部署 Docker-Harbor 服务四、在其他客户端上传镜像五、维护管理Harbor 一、Docker Harbor概述 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅…

LLM - 使用 Neo4j 可视化 GraphRAG 构建的 知识图谱(KG) 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142938982 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Neo4j …

MySql的redo log

文章目录 什么是redo logredo log 组成数据更新流程两阶段提交binlog为什么要两阶段提交结语 数据库事务的4个特性之一的持久性是数据库保证数据一致性的关键&#xff0c;mysql为了确保事务在系统崩溃后也能恢复&#xff0c;引入了redo log 重做日志这一机制。 什么是redo log…

2024前端面试题大全

2024前端面试题大全涵盖了多个方面&#xff0c;包括HTML、CSS、JavaScript、Vue、React等前端技术。‌ HTML和CSS面试题 ‌HTML5新特性‌&#xff1a;包括绘画canvas、媒体回放元素video和audio、本地离线存储localStorage和sessionStorage、语义化更好的内容元素如article、…

大厂面试真题-说说jdk1.7和1.8的hashmap的区别以及各自的问题

JDK 1.7和JDK 1.8中的HashMap存在显著的区别&#xff0c;并且各自存在一些问题。以下是对两者的详细对比及问题分析&#xff1a; 一、区别 底层数据结构&#xff1a; JDK 1.7&#xff1a;HashMap的底层结构是由数组&#xff08;也被称为“位桶”&#xff09;和链表构成。当has…