LGP9871 [NOIP 2023] 天天爱打卡 学习笔记

news/2025/10/7 12:00:54/文章来源:https://www.cnblogs.com/OrinLoong/p/19128322

LGP9871 [NOIP 2023] 天天爱打卡 学习笔记

Luogu Link

前言

经典题了属于是。写 \(\texttt{LGP12581}\) 时特此来回顾。

当年是有多么糖啊。希望现在只有棒棒没有糖吧。

题意简述

\(\text{T}\) 同学非常热衷于跑步。为了让跑步更加有趣,他决定制作一款叫做《天天爱打卡》的软件,使得用户每天都可以进行跑步打卡。开发完成后,他找来大 \(\text{Y}\) 同学试运行。

\(\text{Y}\) 有一个属性:能量值(初始为 \(0\))。试运行共 \(n\) 天,每天大 \(\text{Y}\) 可以选择打卡与否。若打卡,他的能量值减少 \(d\),允许减到负数。特别地,他不能连着打卡超过 \(k\) 天。

软件中又有 \(m\) 个挑战,每个形如 \((x_i,y_i,v_i)\),表示:若第 \(x_i\) 天时大 \(\text{Y}\) 已经连续打卡了 \(y_i\) 天以上,小 \(\text{T}\) 同学就会请他吃饭,从而使他的能量值提高 \(v_i\)

试最大化 \(n\) 天结束后大 \(\text{Y}\) 的能量值。

多测。\(T\le 10\)\(1\le k,n\le 10^9\)\(1\le m\le 10^5\)\(1\le d,v_i\le 10^9\)

做法解析

嗯首先你写个暴力 \(\texttt{DP}\) 出来。这人干的事就只有打卡和不打卡两种了,而且收益与限制的计算都与连续段有关(收益是要你的限制段能覆盖住它的时间段,限制相当于你不能有超过 \(k\) 的打卡连续段),你能不会这个暴力 \(\texttt{DP}\) 你是这个。

所以你显然可以设 \(dp_i\) 为考虑前 \(i\) 天时的最大收益,然后设 \(f_{i,j}\) 考虑前 \(i\) 天且 \([j,i]\) 打卡的最大收益。转移是显然的:\(dp_i=\max(dp_{i-1},\max_{j=i-k+1}^i f_{i,j})\)\(f_{i,j}=w_{[j,i]}+dp_{j-2}-d\times(i-j+1)\)。其中 \(w_{[j,i]}\)\([j,i]\) 打卡时完成挑战的收益。

暴力做是 \(O(nkm)\)\(O(n^2)\)\(O(m^2)\) 或者其它什么类似这个复杂度的。这不重要。

重要的是,你应当发现 \(f_{i-1,j}\) 可以转移到 \(f_{i,j}\),且这个过程是很能优化的。首先,多跑一天步会因耗能带来 \(-d\) 的贡献。然后,我们理所当然把所有挑战挂在右端点,这样 \(\forall j\in (x-y,x]\)\(f_j\) 就得到 \(v\) 的贡献。这就转移完了。一个全局改一个区间改,能忍住不把 \(f_i\)\(j\) 为下标摊到线段树上维护你是这个。所以这道题就做完了。

不过,这个题 \(n\)\(m\) 的值域差异要求你离散化,略过考虑一些完全不必要的决策点。我们每个跑步连续段不起终于挑战的起点或终点总是不优秀的。这里离散化还是很重要的。

注意,离散化之后,除非离散化后的两个天数差仍为 \(1\),或者 \(j=1\),否则 \(f_{i,j}\) 转移中 \(dp_{j-2}\) 应改为 \(dp_{j-1}\)

对就这样。

代码实现

#include <bits/stdc++.h>
using namespace std;
using namespace obasic;
const int MaxM=1e5+5;
const lolo Inf=1e18;
int N,M,K,X,Y,Z,B[MaxM<<1],nln;lolo D;
struct anob{int l,r,v;}A[MaxM];
bool cmpr(anob a,anob b){return a.r<b.r;}
struct SegTree{lolo mx[MaxM<<3],tag[MaxM<<3];int cl[MaxM<<3],cr[MaxM<<3],cmid[MaxM<<3];int ls(int u){return u<<1;}int rs(int u){return (u<<1)|1;}void build(int u,int l,int r){mx[u]=tag[u]=0,cl[u]=l,cr[u]=r;if(l==r)return;int mid=(l+r)>>1;cmid[u]=mid;build(ls(u),l,mid),build(rs(u),mid+1,r);}void pushup(int u){mx[u]=max(mx[ls(u)],mx[rs(u)]);}void maketag(int u,lolo x){mx[u]+=x,tag[u]+=x;}void pushdown(int u){if(tag[u])maketag(ls(u),tag[u]),maketag(rs(u),tag[u]),tag[u]=0;}void update(int u,int dl,int dr,lolo x){if(dl<=cl[u]&&cr[u]<=dr){maketag(u,x);return;}pushdown(u);if(dl<=cmid[u])update(ls(u),dl,dr,x);if(dr>cmid[u])update(rs(u),dl,dr,x);pushup(u);}lolo getmax(int u,int dl,int dr){if(dl<=cl[u]&&cr[u]<=dr)return mx[u];pushdown(u);lolo res=-Inf;if(dl<=cmid[u])maxxer(res,getmax(ls(u),dl,dr));if(dr>cmid[u])maxxer(res,getmax(rs(u),dl,dr));return res;}
}SgT;
lolo dp[MaxM<<1];
void mian(){readis(N,M,K,D);for(int i=1;i<=M;i++){readis(X,Y,Z);if(Y>K)continue;A[i]={X-Y+1,X,Z},B[i]=X-Y+1,B[i+M]=X;}sort(A+1,A+M+1,cmpr);sort(B+1,B+M*2+1),nln=unique(B+1,B+M*2+1)-(B+1);for(int i=1;i<=M;i++)A[i].l=lwberi(B,nln,A[i].l),A[i].r=lwberi(B,nln,A[i].r);SgT.build(1,1,nln);for(int i=1,p=1,lb=1;i<=nln;i++){int lpos=(B[i]!=B[i-1]+1||i==1)?i-1:i-2;SgT.update(1,i,i,dp[lpos]);if(i>1)SgT.update(1,1,i-1,-D*(B[i]-B[i-1]));SgT.update(1,i,i,-D);for(;p<=M&&A[p].r==i;p++)SgT.update(1,1,A[p].l,A[p].v);while(B[lb]<B[i]-K+1)lb++;dp[i]=max(dp[i-1],SgT.getmax(1,lb,i));}writil(dp[nln]);
}
int Tpn,Tcn;
int main(){readis(Tpn,Tcn);while(Tcn--)mian();return 0;
}

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

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

相关文章

【OpenGL ES】Windows上OpenGL环境搭建

1 前言 ​ Windows 的图形 API 是 DirectX,对 OpenGL 的支持比较有限(系统自带的 opengl32.dll 仅支持 OpenGL 1.1 版本),因此在 Windows 上进行OpenGL 开发时,通常需要借助第三方库或工具来支持更高版本的 Op…

虚拟现实教育终端科技方案——基于EFISH-SCB-RK3588的全场景国产化替代

虚拟现实教育终端科技方案——基于EFISH-SCB-RK3588的全场景国产化替代pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

强化学习系统性学习笔记(二):策略优化的理论基础与算法实现

强化学习系统性学习笔记(二):策略优化的理论基础与算法实现策略优化的理论基础与算法实现 3.2 REINFORCE: 最早的策略梯度算法 在完成策略梯度定理的推导后,我们获得了梯度的理论形式: \[\nabla_\theta J(\pi_\thet…

惠州做公司网站广州软件开发培训班

RK3568测试tdd 一、门禁取包二、烧录三、跑tdd用例四、查看结果参考资料 一、门禁取包 右键复制链接&#xff0c;粘贴下载&#xff1b;解压到文件夹&#xff1b; 二、烧录 双击\windows\RKDevTool.exe打开烧写工具&#xff0c;工具界面击烧写步骤如图所示&#xff1a; 推荐…

完整教程:WordPress 6.5版本带来的新功能

完整教程:WordPress 6.5版本带来的新功能pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

网站维护的具体问题wordpress 代理插件

需求&#xff1a;点击button按钮&#xff0c;录入成功后&#xff0c;页面上的input框自动聚焦&#xff0c;快速进行下一次录入&#xff0c;提高效率 开始尝试了几种方法都没有成功 一、首先想到的用vue指令 v-focus&#xff0c;然而没有成功 <Input v-model"book.isbnO…

手机网站判断跳转代码怎么写医院建设网站与托管

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

微信开发框架/WTAPI框架

微信开发框架/WTAPI框架,个人微信接口开发,个微API,个人二次开发微信API,个人微信号二次开发api协议/微信个人号开发API接口 WTAPI框架,是完整的第三方服务平台,并基于IPAD协议8.0.37开发出的最新个微API服务框架…

免费开源Umi-OCR,离线采用,批量精准!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025连接器厂家权威推荐榜:防水/m12防水/m8/防水3芯/防水t型三通/防水线束线缆/防水包胶连接器实力制造与创新技术深度解析

在工业4.0和智能制造快速发展的今天,连接器作为电子设备中不可或缺的基础元件,其技术水平和产品质量直接影响着整个电子系统的可靠性和性能。随着5G通信、新能源汽车、工业自动化等新兴领域的蓬勃发展,全球连接器市…

STM32外部中断(EXTI)以及旋转编码器的简介 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

神经网络中的梯度消失与梯度爆炸 - 实践

神经网络中的梯度消失与梯度爆炸 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

[数学 - 正态分布]

您提到的“中间隆起的图”很可能就是正态分布(Normal Distribution)的图形,也叫钟形曲线(Bell Curve)。 在统计学和金融学中,这个图形和回归分析、标准差一样重要,因为它是我们理解风险、波动性和概率的基础。隆…

Withdraw x Failure《一元微积分》讲义习题

习题 \(1.1\): 第 \(1\) 题: \(1.1.7\):\(\N\) 上的加法是对乘法满足分配律:即对任意 \(m,n,k\in\N\),\((m+n)\cdot k=m\cdot k+n\cdot k\)。 证明:对 \(k\) 做数学归纳。 令 \(A=\{k\in\N|\forall m,n\in \N,(m…

状态压缩 DP

“状态压缩动态规划”中的状态,通常与集合相关联。集合本身具有确定性、互异性和无序性 3 个性质,这也就决定了集合只关心每个元素的存在状态,而这通常可以使用 0 或者 1 表示存在或者不存在。例如,有 8 个物品,对…

QGIS开发笔记(四):QgsRasterLayer加载Cesium二维地图的瓦片地图数据到QGIS

前言地图引擎加载瓦片地图是基本操作,本篇对qgis添加图片瓦片地图。 Demo 专业名词波段波段(Band) 是指栅格数据中具有特定波长范围的信息层,类似于数字图像中的 “通道”。它是栅格数据(尤其是遥感影像)的核心组…

基于 Chrome 浏览器扩展的Chroma简易图形化界面 - 实践

基于 Chrome 浏览器扩展的Chroma简易图形化界面 - 实践2025-10-07 11:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

建筑设计作品展示网站wordpress免费相册

在本篇博客中&#xff0c;作者将会讲解类与对象的最后一篇。 一.再谈构造函数 在类与对象&#xff08;上篇&#xff09;中&#xff0c;我们讲到了构造函数&#xff0c;其实构造函数就是给每个成员变量进行赋值&#xff01;&#xff01;&#xff01; 仅仅只是赋值而已&#xf…

苍南县网站集约化建设西安网站优化排名案例

原文 http://www.eoeandroid.com/thread-274556-1-1.html 【初识Github】 首先让我们大家一起喊一句“Hello Github”。YEAH!就是这样。Git是一个分布式的版本控制系统&#xff0c;最初由Linus Torvalds编写&#xff0c;用作Linux内核代码的管理。在推出后&#xff0c;Git在其…

详细介绍:go语言学习 第4章:流程控制

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …