专栏文章

题解:P12767 [POI 2018 R3] 围栏 Fence

P12767题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@min63ypc
此快照首次捕获于
2025/12/01 21:11
3 个月前
此快照最后确认于
2025/12/01 21:11
3 个月前
查看原文
首先考虑一个暴力的思路。我们枚举 yy 最小的点,然后按极角排序,设 DP 状态 fi,jf_{i,j} 表示我们凸多边形的前两个点是 i,ji,j 两个点,目前的凸多边形价值的最大值,需要预处理 i,ji,j 两个点与最低点形成的三角形内所有点的价值和 vali,jval_{i,j},单次 DP 和预处理贡献都是 O(n3)\mathcal{O}(n^3) 的,那么总复杂度就是 O(n4)\mathcal{O}(n^4) 的。
接下来考虑优化这个做法。枚举最低点的过程显然是不太能去掉的,于是我们考虑优化转移的过程和 valval 的求值。
先思考如何优化 valval 的求值。
我们考虑固定 ii,尝试快速求出 vali,jval_{i,j} 的取值。我们将对最低点极角排序后排名在 ii 之后的点拉出来,再做一次极角排序,对于一个 jj,其他的点 kk 能对 vali,jval_{i,j} 产生贡献的条件是,leni,k<lenj,klen_{i,k} < len_{j,k} 且保证 kk 在新的极角排序中的排名大于 jj(不合法情况参见上图),那么我们按 leni,jlen_{i,j} 排序后,用 BIT 维护排名小于某个值的 wjw_j 之和即可,单次 valval 的取值的时间复杂度优化到了 O(n2logn)\mathcal{O}(n^2 \log n)
接下来考虑优化转移。
对于连续的三个点 i,j,ki,j,k,其合法可以视作,若按极角排序,那么 j,ij,i 边的反向延长线的排名小于 j,kj,k 边的排名。那么我们枚举中间点转移,然后排序后维护前缀 max\max 值即可,单次时间复杂度也是 O(n2logn)\mathcal{O}(n^2 \log n)
那么总的时间复杂度就是 O(n3logn)\mathcal{O}(n^3 \log n),跑不满,可以轻松通过。图画得可能比较抽象。

评论

1 条评论,欢迎与作者交流。

正在加载评论...