【ybt金牌导航1-2-4】免费馅饼
免费馅饼
题目链接:ybt金牌导航1-2-4
题目大意
有一个直线,在某一个时刻有一个馅饼会出现在一些位置,有它的价值。
一个人一开始可以站在直线的任意地方,然后他每个时刻可以不移动,或向任意一边移动一个单位或两个单位。
要你求这个人最多能拿多少价值的馅饼。
思路
我们看到这道题,弄出最普通的 dp。
为对于前 个馅饼,接住了第 个的最大贡献。
那就是枚举前面的每个点,还有不枚举,然后首先看能不能从那个点赶到这个点,然后就在可以的里面找最大值,然后加上这个点的贡献,就是 了。
那我们可以看出这是要馅饼按时间先后顺序排序。
而且看能否赶到,就要满足这个式子:(假设 赶到 ,分别掉到格子的编号是 和 ,掉的时间分别是 和 )
总的来说,就是这个:
但是这样会超时,那我们考虑优化看馅饼的先后顺序的地方,看能不能通过这个先后顺序,直接快速地找到满足的点。
那我们考虑把式子化开,因为有绝对值,所有会有两个式子:
那它要分开两种,就很麻烦,我们但其实我们会发现,如果要的那个式子满足了,另一个也会满足。
那我们不妨让这两个式子都要满足。
那我们看怎么快速地找呢?
首先,因为两个式子的左右两边其实分别是 点的两个值,那我们可以一开始就算出来。
那我们考虑先按一个排好序,然后就只用判断另一个条件就可以了。
但是直接判断还是不行。
那我们考虑用一些数据结构来优化它。
那我们排好序之后,就要判断另一个值的大小关系。那只要大小关系,我们就可以把它离散化,不然值太大,数组装不下。
那离散化之后,怎么看大小呢?
我们想想,从小到大排序之后,意思就是可以从前面走到后面(当然这里是假设第二个条件都满足),那你现在就还要看第二个条件。
那就是当两个值,如果第一个值的位置比第二个值的位置靠前,而且第一个位置的第二个比较的值小于第二个值的第二个比较的值。那就是可以的。
你会发现它就是一个顺序对。
顺序对逆序对的这些玩意儿,自然就是树状数组。
当然,你用线段树也不是不可以,但是毕竟树状数组简单好打嘛。
(记得这个地方的地址是第二个匹配的值,因为树状数组地址其实就是一个匹配大小的东西,那就应该是最大贡献)
不过这个树状数组不是求逆序对个数或顺序对个数,而是在满足条件的地方取最大值。
那我们只要改一下,改成维护最大值即可。
那你就可以找到当你弄 的时候,最优是从哪里转移过来。
那至于 ,就是最优还要加上拿到它这个馅饼能有的价值。
至于最后输出什么,就是所有最后结束的地方的最大值。那就是查询 中树状数组的最大值。( 是离散化之后,有多少个不同的第二个匹配的值)
其实就是看找到最后选了哪里作为结尾使得价值最大。
那就是这样了。
代码
__EOF__

本文链接:https://www.cnblogs.com/Sakura-TJH/p/YBT_JPDH_1-2-4.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现