JOISC 2021 Day3 保镖

Day P1+P2+P3+P4+P5+P6

放到二维平面上考虑,点 (x,y) 表示 x 时刻在 y 位置上,那么第 i 顾客的路径可以看成起点为 (ti,ai),终点为 (ti+|biai|,bi) 的线段 Pi

注意到一个保镖的最优策略中一定不会闲着不动,因为如果他此时正在保护一个人的话显然跟下去比不动更优;如果他此时没有保护一个人的话显然是去找下一个保护的人更优。所以保镖的路径形如若干斜率 1 或者 1 形成的线段拼接起来的折线 Qi

考虑到一个保镖一旦离开了正在保护的人就再也追不上他了,那么保镖 i 保护顾客 j 时间为 PjQi 重合的线段在时间轴上的投影长度,也就是重合线段长度 l12。考虑将坐标轴顺时针旋转 45 度再进行放缩,那么 (x,y)(xy,x+y),此时重合线段长度 l2l,那么保护时间就是重合线段长度的 12,收益就变成了 ci2l。于是令 cici12

于是问题转化成平面上有若干平行或垂直于坐标轴的直线 P1,P2,,Pnq 次询问,每次询问给出一个点 (x,y),每次只能向上/向右走单位距离,和 Pi 重合的长度为 Li,收益为 ciLi,求总收益最大是多少。

所有顾客线段延长交叉起来会变成一个大小为 O(n×n) 的网格图。考虑 (x,y) 一定是先径直走到网格图的某条线上,沿着某条可能不完整的线再走到某个格点,最后再在格点之间移动。

对网格进行离散化之后容易 dp O(n2) 预处理出 fi,j 表示目前在网格上的 (i,j) 点,对应坐标系中的 (xi,yj) 点(1im,1jk),只能向上/向右走,走下去的最大收益。然后假设 (x,y) 向上走到了 (x,yj) 所在的一条边,再向右走到了第一个格点 (xi,yj),那么取经过 (x,yj)ci 最大的线段 Li,收益就是 ci(xix)+fi,j

注意到经过 (x,yj) 的线段必定经过 (xi,yj)(xi1,yj),因为一条直线起码经过两个格点。所以记 vi,j 为经过格点 (xi,yj)(xi,yj) 不为其右端点的线段 Pici 的最大值,那么收益就是 vi1,j(xix)+fi,j

注意到 x 固定时 xi 为第一个大于 x 的格点横坐标,所以 i 是固定的,将 vi1,j 看作一条直线的斜率,fi,j 看作截距,问题转化为求给定 k 条直线在 xix 处的 y 坐标的最大值,离线下来李超树解决即可。

复杂度 O((n2+q)logn+qlogq)

posted @   Arghariza  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
主题色彩