洛谷 P1725 琪露诺(线段树优化dp)
题目链接
https://www.luogu.com.cn/problem/P1725
思路
我们令 d p [ i ] dp[i] dp[i]表示琪露诺移动到第 i i i个格子时能够获得的最大冰冻指数。
显然,状态转移方程为: d p [ i ] = m a x ( d p [ i ] , d p [ k ] + a [ i ] ) dp[i] = max(dp[i],dp[k]+a[i]) dp[i]=max(dp[i],dp[k]+a[i]),其中 k + L ≤ i k+L \le i k+L≤i并且 ( k + R ≥ i ) (k+R \ge i) (k+R≥i)。
因为 L L L和 R R R的值很大,所以我们可以使用线段树来进行优化。
使用线段树维护区间 d p [ i ] dp[i] dp[i]的最大值,每计算出一个新的 d p [ i ] dp[i] dp[i],就将其扔到线段树中。我们令编号从 1 1 1开头,则最后的答案为 d p [ n + 2 ] dp[n+2] dp[n+2]。
代码
#include <bits/stdc++.h>using namespace std;#define int long long
#define double long doubletypedef long long i64;
typedef unsigned long long u64;
typedef pair<int, int> pii;const int N = 2e5 + 5, M = 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f3f3f3f3f;int n, l, r;
int a[N], dp[N];
struct segmenttree
{struct node{int l, r, maxx, tag;};vector<node>tree;segmenttree(): tree(1) {}segmenttree(int n): tree(n * 4 + 1) {}void pushup(int u){auto &root = tree[u], &left = tree[u << 1], &right = tree[u << 1 | 1];root.maxx = max(left.maxx, right.maxx);}void pushdown(int u){auto &root = tree[u], &left = tree[u << 1], &right = tree[u << 1 | 1];if (root.tag){left.tag = root.tag;right.tag = root.tag;left.maxx = root.tag;right.maxx = root.tag;root.tag = 0;}}void build(int u, int l, int r){auto &root = tree[u];root = {l, r};if (l == r){root.maxx = -inf;return;}int mid = l + r >> 1;build(u << 1, l, mid);build(u << 1 | 1, mid + 1, r);pushup(u);}void modify(int u, int l, int r, int val){auto &root = tree[u];if (root.l >= l && root.r <= r){root.maxx = val;root.tag = val;return;}pushdown(u);int mid = root.l + root.r >> 1;if (l <= mid) modify(u << 1, l, r, val);if (r > mid) modify(u << 1 | 1, l, r, val);pushup(u);}int query(int u, int l, int r){auto &root = tree[u];if (root.l >= l && root.r <= r){return root.maxx;}pushdown(u);int mid = root.l + root.r >> 1;int res = -inf;if (l <= mid) res = query(u << 1, l, r);if (r > mid) res = max(res, query(u << 1 | 1, l, r));return res;}
};
void solve()
{cin >> n >> l >> r;fill(dp, dp + 1 + n + 2, -inf);for (int i = 1; i <= n + 1; i++){cin >> a[i];}segmenttree smt(n + 1);smt.build(1, 1, n + 1);dp[1] = a[1];smt.modify(1, 1, 1, dp[1]);for (int i = 2; i <= n + 1; i++){if (i - l < 1){dp[i] = -inf;continue;}dp[i] = max(dp[i], smt.query(1, max(i - r, 1ll), max(i - l, 1ll)) + a[i]);smt.modify(1, i, i, dp[i]);}//n+2表示对岸,包括>n+1的所有格子,所以要特殊处理。dp[n + 2] = smt.query(1, max(n + 2 - r, 1ll), max(n + 2 - 1, 1ll));cout << dp[n + 2] << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int test = 1;// cin >> test;for (int i = 1; i <= test; i++){solve();}return 0;
}
相关文章:
洛谷 P1725 琪露诺(线段树优化dp)
题目链接 https://www.luogu.com.cn/problem/P1725 思路 我们令 d p [ i ] dp[i] dp[i]表示琪露诺移动到第 i i i个格子时能够获得的最大冰冻指数。 显然,状态转移方程为: d p [ i ] m a x ( d p [ i ] , d p [ k ] a [ i ] ) dp[i] max(dp[i],dp…...
【LeetCode】【算法】19. 删除链表的倒数第N个结点
LeetCode 19. 删除链表的倒数第N个结点 题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 思路 思路:快慢指针,快指针先移动n步,快慢指针再同时移动直到快指针到达链表末尾,此…...
Python爬虫 | 爬取豆瓣电影Top250的数据
简单记录一下,实现爬取豆瓣电影Top 250的数据。 这里我使用requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML页面。 1.安装requests和BeautifulSoup库。 如果没有安装,可以通过以下命令安装: pip install requests bea…...
mac 中python 安装mysqlclient 出现 ld: library ‘ssl‘ not found错误
1. 出现报错 2. 获取openssl位置 brew info openssl 3. 配置环境变量(我的是在~/.bash.profile) export LDFLAGS"-L/opt/homebrew/Cellar/openssl3/3.4.0/lib" export CPPFLAGS"-I/opt/homebrew/Cellar/openssl3/…...
完全清除:苹果手机照片怎么彻底删除
在使用iPhone的过程中,由于拍摄积累的照片往往会占用大量存储空间。有时候,我们需要彻底删除这些照片以释放空间或保护隐私。苹果手机照片怎么彻底删除?在此,本文将与你分享一些实用的技巧。 彻底删除的重要性 彻底删除照片不仅涉…...
高德地图多个图片组成标点(自定义点标记内容)
图标的实现自定义点标记内容...
02-1_MVCC版本链清理
MVCC-版本链清理 文章目录 MVCC-版本链清理简介依赖机制Purge 操作的触发时机版本链清理的详细过程示例操作流程延迟清理配置和监控总结 简介 MySQL 中的 MVCC 机制通过版本链来管理数据的多版本存储,以支持高并发的读写操作。然而,随着事务的进行&…...
探索Python视频处理的瑞士军刀:ffmpeg-python库
文章目录 **探索Python视频处理的瑞士军刀:ffmpeg-python库**第一部分:背景介绍第二部分:ffmpeg-python库是什么?第三部分:如何安装ffmpeg-python库?第四部分:简单库函数使用方法1. 视频转码2. …...
进程间通信 - 通道
进程间通信 - 通道 什么是管道? 进程间的通信方式有五种,分别为:管道、信号量、共享内存、消息队列和套接字。 管道:本质上就是一个文件,前面的进程以写方式打开文件,后面的进程以读方式打开。这样前面写完后面读,于…...
华为数通HCIA系列第5次考试-【2024-46周-周一】
文章目录 1、子网掩码有什么作用,和IP地址是什么关系,利用子网掩码可以获取哪些信息?2、已知一个IP地址是192.168.1.1,子网掩码是255.255.255.0,求其网络地址3、已知某主机的IP地址是192.168.100.200,子网掩…...
【Linux】如何通过终端命令查看当前可用网络 WIFI + 设置已配置网络的连接优先级 + 连接/断连网络
【Linux】通过命令行,查看当前可用网络 WIFI 设置已配置网络的连接优先级 连接网络 列出所有可连接网络 nmcli device wifi list这个命令会列出所有可连接 wifi,*表示当前连接。 IN-USE BSSID SSID MODE CHAN …...
华为路由策略配置
一、AS_Path过滤 要求: AR1与AR2、AR2与AR3之间建立EBGP连接 AS10的设备和AS30的设备无法相互通信 1.启动设备 2.配置IP地址 3.配置路由器的EBGP对等体连接,引入直连路由 [AR1]bgp 10 [AR1-bgp]router-id 1.1.1.1 [AR1-bgp]peer 200.1.2.2 as-nu…...
Debezium日常分享系列之:异步 Debezium 嵌入式引擎
Debezium日常分享系列之:异步 Debezium 嵌入式引擎 动机目标非目标保留Kafka Connect模型计划的更改线程池并行运行源任务存储偏移量并发处理CDC事件禁用CDC事件的完全排序自定义记录处理器并行处理记录的选项存储偏移量引擎状态和生命周期防止资源泄漏异常处理退出…...
leetcode206. Reverse Linked List
Given the head of a singly linked list, reverse the list, and return the reversed list. 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 思路一:双指针 class Solu…...
【MATLAB源码-第291期】基于matlab的AMI编码解码系统仿真,输出各个节点波形。
操作环境: MATLAB 2022a 1、算法描述 AMI(Alternate Mark Inversion,交替极性反转)是一种广泛使用的编码方法,尤其是在通信系统中,用于传输二进制数据。AMI编码的特点是在传输过程中,对于0信…...
springboot苍穹外卖实战:十一:复盘总结
近期在整理草稿区,故放出此贴。 server模块需要导入对common模块的依赖 <dependency><groupId>org.example</groupId><artifactId>sky-common</artifactId><version>1.0-SNAPSHOT</version></dependency>我现在有个…...
基于Python的药房管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
chat2db数据库图形化工具
数据库图形化工具 DataGrip:由 JetBrains 公司开发,是开发者中广为人知的数据库管理工具,功能强大且支持多种数据库。DBeaver:一款开源的数据库管理工具,虽然相对 DataGrip 知名度稍低,但在开发者社区中也…...
弱口令整改方案:借助双因子认证加强账号密码安全
弱口令整改方案可借助宁盾 2FA双因子身份认证来解决。双因子认证(也称双因素身份认证)是一种安全认证机制,通过结合两个及以上不同的身份验证因子,提高企业用户在办公、研发、生产、运维场景下的的账号密码安全性。它可以有效防止…...
动态代理的优势是什么?
在数据采集的世界里,效率和稳定性是衡量代理IP服务优劣的关键指标。动态代理,作为一种高效的网络工具,正逐渐成为企业和开发者的首选。今天,我们就来聊聊动态代理的优势,以及它如何成为数据采集的高效之选。 动态代理…...
将大型语言模型(如GPT-4)微调用于文本续写任务
要将大型语言模型(如GPT-4)微调用于文本续写任务,构造高质量的训练数据至关重要。以下是如何构造训练数据的详细步骤: 1. 数据收集: 多样性: 收集多种类型的文本,包括小说、新闻、论文、博客等…...
引入了JUnit框架 却报错找不到:java.lang.ClassNotFoundException
完整报错如下: Internal Error occurred. org.junit.platform.commons.JUnitException: TestEngine with ID junit-jupiter failed to discover tests at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrc…...
深度学习:tensor的定义与维度
tensor的定义与维度 Tensor的定义与维度 Tensor是一个多维数组,用于在一般化的n维空间中表示数据和操作。在深度学习框架中,如TensorFlow或PyTorch,Tensor是基础数据结构,用来存储输入、输出、权重等信息。下面是Tensor不同维度…...
基于Python的膳食健康系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码原理.编码相关api
前提: 从前面的学习我们知道 AVFrame中是最原始的 视频数据,这一节开始我们需要将这个最原始的视频数据 压缩成 AVPacket数据, 我们前面,将YUV数据或者 RGBA 数据装进入了 AVFrame里面,并且在SDL中显示。 也就是说&…...
算法——移除元素(leetcode27)
对于移除元素这道题来讲,我首先想到的还是双指针,根据题目要求我们需要在给定的一组数组中找出与目标值不同的元素数量并且将与目标值不同的元素全部移至数组左边右边则不需关注数组元素的大小,我们利用两个指针一个指向数组首部位置(左指针&…...
『OpenCV-Python』安装以及图像的读取、显示、保存
点赞 + 关注 + 收藏 = 学会了 OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理、机器学习和实时计算机视觉应用。比如图像和视频的滤镜和降噪、物体检测、人脸识别、证件号识别、车牌识别等应用。当然,也有其他工具可以对这些领域做支持,但本专栏是介绍 OpenCV 的,所…...
python开发桌面应用(跨平台) 全流程
前言 之前开发一些软件,亚马逊商品分析相关软件,但是基本上是通过程序猿控制台命令启动,同时在启动之前,还要进行程序依赖包,这对于非开发人员而言,简直是一种灾难, 为了让软件对于小白更加易用, 打算将其封装成应用程序(跨平台), 下面带大家一起完成python开发桌面应用的三步…...
el-table-column prop值根据数组获取
方法一: 可以给el-table-column添加一个属性:formatter,代码如下: 这里是因为多个列都需要同样的计算,所以使用column.property获取属性,不然可以直接row.属性 方法二: 直接在template scope …...
MySQL_聚合函数分组查询
上篇复习: 设计数据库时的三大范式1.第一范式,一行数据中每一列不可再分 关系型数据库必须要满足第一范式,设计表的时候,如果每一列都可以用SQL规定的数据类型描述,就天然满足第一范式. 2.第二范式,在第一…...
给别人做网站收多少钱/做企业网站哪个平台好
可怜,疯狂掉分,再也不随便提前报名周赛了。这周的周赛,本来已经报名好了,但临时有事无法参加,同时我又忘记我报名了,导致掉分,心疼自己一波。 详细题解如下。 1. 访问所有点的最小时间…...
做婚恋网站投入多少钱/seo网站推广方式
我主要负责苦。智能仓储物流技术研习社长按识别别关注围绕厂内物流Intralogisitics,分享仓储物流自动化技术、设备、系统等知识,畅谈智能仓储物流的未来和去向。专栏包括智能仓储物流自动化规划设计,自动化立体库、智能机器人,自动…...
公司做网站需要提供什么条件/网址推广
Access无法打开 Windows 出现"正在准备安装,正在配置" 症状:Windows 正在配置 Microsoft Office Professional Edition 2003,请稍候配置工作似乎按预期完成,但是 Access 2003 无法启动。如果尝试再次启动 Access 2003&a…...
wordpress问题/百度用户服务中心
今天看了《流浪地球》。 吴京真牛逼,从参演到零片酬,从演员到投资人,他正引领中国电影踏入炫丽而耀眼的未来,他鹤立于这个群魔乱舞焦躁浮华的时代,独具慧眼,不辱使命。 《流浪地球》是一部跨时代的中国电…...
网站建设完成后怎么上传服务器/网络营销技巧和营销方法
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ 接口定义增强 在JDK1.8以前,接口是定义的: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方…...
糖果网站建设策划书/台湾永久免费加密一
PHP在安装后,会在php.ini 文件中设置报错、提醒、警告等方式的出现,这样的方式可以使我们在调试PHP程序的时候能及时了解程序所存在的问题。然后,有时候我们并不需要提醒、警告 等内容,比如当我们使用PHP5.5(或更高&am…...