CF1810G The Maximum Prefix

发布时间 2023-04-18 21:24:33作者: 275307894a

题面传送门

挺好一题,综合了几种方法。

首先看到题会想到一个dp:设 \(f_{i,j,k}\) 表示到了第 \(i\) 个位置,历史前缀最大值为 \(j\) ,当前前缀和为 \(k\) 的概率,乘上期望就是答案。但是这个状态非常寄因为状态本身就有 \(O(n^3)\) 了而且不易优化。所以我们需要另辟蹊径。

不妨假设如果有多个最大前缀和,我们认为只有最前面的位置是最大前缀和。那么满足某个位置是最大前缀和的条件是什么呢?我们发现,如果第 \([1,x]\) 为最大前缀和,那么要满足对于所有 \(y\leq x\)\(\sum\limits_{i=y}^x{a_i}> 0\),对于所有 \(y>x\)\(\sum\limits_{i=x+1}^{y}{a_i}\leq 0\)

这样我们将原来奇怪的限制转化成和 \(0\) 的大小关系,这看上去就要好算很多。设 \(f_{i,j}\) 表示到了 \(i\) 点,\(i+1\) 到最大前缀和的位置之间的 \(a\) 之和为 \(j\),要求 \(j>0\)。当 \(j\) 第一次 \(=0\) 的时候说明到了最大前缀和的位置,转化成 \(g_{i,j}\) 表示到了 \(i\) 点,最大前缀和位置 \(+1\)\(i\) 点之间总和为 \(j\) 的期望,要求 \(j\leq 0\)。统计答案也是平凡的。

\(f_{0,i}\) 的初始值设为 \(h_i\) 就可以并行 dp 了,时间复杂度 \(O(n^2)\)

submission