【题解】LOJ #6384. 「是男人就过8题——Pony.ai」SignLocation

题意

LOJ #6384. 「是男人就过8题——Pony.ai」SignLocation

给定 n 个整点 p1,...,pn 以及 k 次标记点的机会,定义 c(i,j) 为:

  1. i 个整点和第 j 个整点之间存在标记点,则 c(i,j) 为距离 i 最近的标记点与 i 的坐标之差。

  2. 反之为 |pipj|

注意标记点不一定在整点上。

ijc(i,j) 的最小值。

0k200,1n10000,pi107

思路

决策单调性优化 dp.

首先可以用反证法证明标记整点最优。

于是可以考虑设 f[i][j] 表示已经标记 i 个整点,最后一个标记的是第 j 个整点时已经产生的最小贡献。

容易发现选出的 k 个标记点会将值域分成 k+1 个区间(可能为空),不妨令 ijc(i,j) 算作是 i 所在区间的贡献。

假设当前最后一个标记点在 r,倒数第二个标记点在 l,那么转移时只需要考虑区间 (l,r) 的贡献。

分类讨论推一下式子:

  1. l<j<r
    此时 (i,j) 之间没有其他的标记点,于是贡献为坐标之差。
    ijc(i,j)=2p=l+2r1q=l+1r1(xpxq)
    考察每一个下标的出现次数,可以化简上式得:
    =p=l+2r1xp(pl1)q=l+1r2xq(rq1)

  2. jl
    此时距离 i 最近的标记点为 l
    ijc(i,j)=p=l+1r1(xpxl)l
    同理化简得 =(p=l+1r1xpl)xl(rl1)l

  3. jr
    此时距离 i 最近的标记点为 r
    ijc(i,j)=p=l+1r1(xrxp)(nr+1)
    化简得 =xr(rl1)(nr+1)p=l+1r1xp(nr+1)

发现只需处理 piipi 的前缀和就可以 O(1) 计算一段区间的贡献。

观察做法,发现是一个划分区间的 dp(选点等价于划分区间),于是联想到决策单调性优化 dp.

根据题解知 确实有决策单调性(具体不太会证),于是上单调性分治优化即可,时间复杂度 O(knlogn)

代码

posted @   kymru  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示
主题色彩