Luogu P5617 [MtOI2019] 不可视境界线

非常好题目。DP 强行优化 O(n3)O(nlog2n)。实际上是把 O(nrlogn)O(nklogn) 的两个 Subtask 结合起来得到正解。

具体来说就是:

  1. 优化转移,此题中代价函数带三角函数十分复杂,考虑尝试 决策单调性(求导 / 四边形不等式)
  2. 优化状态,此题中要求 (恰好)选 k 个圆 需要二维状态,考虑 wqs 二分 优化掉 k 这一维状态。

首先考虑 半径均为 r,圆心均在 x 轴上的 n 个圆 的面积并如何速求。显然直接按圆心位置线性扫一遍,判定圆 i 与圆 i1 的位置关系,再用弓形面积算出重合面积即可。以相交情况看,即:

d(i,j)=pipj2

s(i,j)=r2(π2arccos(d(i,j)r))+2d(i,j)r2d2(i,j)

相离和包含情形是简单的。然后就可以进行简单的 fn,k DP,O(n) 枚举上一个转移,复杂度是 O(n3) 的。但实际上跑不过去这一档分。

CAUTION: 三角函数常数巨大 的。这里可以发现相交时才需要计算,这时显然有 d(i,j)(0,r] 且为 整数,所以可以 O(r) 预处理 所有 arccos(xr) 的值,可大大减小常数。

可以发现这个代价函数 s 是一个很难优化转移的形式。可以意识到类似的问题也出现在 s 为难于分离 i,j 的高次函数的情况下,这时候 决策单调性 的方法常用。

若考虑求导,此题中 s 看起来可导,求出来二阶导数确实是非负的,因此 s 具有凸性,可以用决策单调性优化。但是显然过于难算,并不实用。

因此考虑证明 s(i,j) 满足四边形不等式。这个直接回归几何意义(圆的交)分类讨论即可。

于是用 分治二分队列 求解。可以做到 O(n2logn)


现在转移可以做到均摊 O(logn),但是状态数始终是 O(nk)kn105。所以必须优化掉 k 这一维,也就是去掉 恰好选出 k 的限制,使用 wqs 二分。

Proof:显然 k 这一维上的 fn,k的。几何意义亦可证明。

套路地,每次额外给 每选出一个圆 加上一个贡献 mid 即可。

fi=max(0,mid+maxk=1i1fi+s(k,i))

同样可以用决策单调性优化 maxk=1i1fi+s(k,i) 的转移。

最终复杂度 O(nlognlogk)

posted @   音街ウナ  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示