JOISC 2021 Day3 保镖
Day 。
放到二维平面上考虑,点 表示 时刻在 位置上,那么第 顾客的路径可以看成起点为 ,终点为 的线段 。
注意到一个保镖的最优策略中一定不会闲着不动,因为如果他此时正在保护一个人的话显然跟下去比不动更优;如果他此时没有保护一个人的话显然是去找下一个保护的人更优。所以保镖的路径形如若干斜率 或者 形成的线段拼接起来的折线 。
考虑到一个保镖一旦离开了正在保护的人就再也追不上他了,那么保镖 保护顾客 时间为 和 重合的线段在时间轴上的投影长度,也就是重合线段长度 的 。考虑将坐标轴顺时针旋转 度再进行放缩,那么 ,此时重合线段长度 为 ,那么保护时间就是重合线段长度的 ,收益就变成了 。于是令 。
于是问题转化成平面上有若干平行或垂直于坐标轴的直线 , 次询问,每次询问给出一个点 ,每次只能向上/向右走单位距离,和 重合的长度为 ,收益为 ,求总收益最大是多少。
所有顾客线段延长交叉起来会变成一个大小为 的网格图。考虑 一定是先径直走到网格图的某条线上,沿着某条可能不完整的线再走到某个格点,最后再在格点之间移动。
对网格进行离散化之后容易 dp 预处理出 表示目前在网格上的 点,对应坐标系中的 点(),只能向上/向右走,走下去的最大收益。然后假设 向上走到了 所在的一条边,再向右走到了第一个格点 ,那么取经过 的 最大的线段 ,收益就是 。
注意到经过 的线段必定经过 和 ,因为一条直线起码经过两个格点。所以记 为经过格点 且 不为其右端点的线段 中 的最大值,那么收益就是 。
注意到 固定时 为第一个大于 的格点横坐标,所以 是固定的,将 看作一条直线的斜率, 看作截距,问题转化为求给定 条直线在 处的 坐标的最大值,离线下来李超树解决即可。
复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】