「QOJ 975」Game

一道有趣的凸包题

长度为 \(n\) 的数组 \(A\) ,初始 \(\frac{1}{n}\) 的概率在点 \(i\) ,每次 \(\frac{1}{2}\) 的概率向左或向右移动,到达 \(1\)\(n\) 或主动结束时停止,设在点 \(j\) 停止,收益为 \(A_j\) ,问最大期望收益。\(1 \leq n \leq 5 \times 10^5\), \(1 \leq A_i \leq 10^{12}\)

首先用dp来刻画最优决策,设 \(dp_{i}\) 表示当前在 \(i\) 的最大期望收益,则转移为

\[dp_i = \max(A_i, \frac{dp[i - 1] + dp[i + 1]}{2}) \]

很明显这个dp有后效性,此题数据范围又不支持高斯消元,所以我们观察dp值的特殊性质。

容易发现 \(dp_i\) 是在 \((i - 1, dp_{i - 1})\)\((i + 1, dp_{i + 1})\) 构成的直线在 \(x = i\) 处的取值与 \(A_i\)\(\max\) ,那说明最后所有 \((i, dp_i)\) 连在一起构成了一个上凸包,所以对 \(A\) 构建凸包即可求出所有dp值。

最后算答案不必按点一个一个求dp值,设构建的凸包选择了下标为 \(p_i\) 的点,满足 \(1 = p_1 < p_2 < \dots < p_k = n\) ,因为 \(A\) 上横坐标 \(i\) 均匀分布,所以 \(p_i\)\(p_{i + 1}\) 构成的直线的贡献可以用 \(\frac{(p_{i + 1} - p_i - 1)(a_{p_{i + 1}} + a_{p_i})}{2}\) 来计算,最终答案为

\[\frac{\sum_{i = 1}^k 2A_{p_i} + \sum_{i = 1}^{k - 1} (p_{i + 1} - p_i - 1)(a_{p_{i + 1}} + a_{p_i})}{2n} \]

时间复杂度 \(\text{O}(N)\)
submission

posted @ 2026-07-12 11:15  keysky  阅读(7)  评论(0)    收藏  举报