格式:max 使用 \max,sum 使用 \text{sum},代码使用 <hidden></hidden>
隐藏,均已修改。学会使用 \begin{cases}\end{cases}
来表示不同的 case,不需要自己设计格式。
内容:内容过于简单!可尝试从读者的角度想想能否看懂。
单调队列优化,可以降低诸如 $dp[i]=\max\{dp[j]\}+C[i](1\le j <i)$ 这样的状态转移方程的时间复杂度。主要原理是利用一个单调队列来维护 $dp[i]$ 的最值。
我们不难写出状态转移方程
$$ dp[i]= \begin{cases} &\text{sum}[i]&i\le k\\ &\max\{dp[j-1]+\text{sum}[i]-\text{sum}[j]\}&i-k \le j\le i,i>k \end{cases} $$
答案为 $\text{ans}=\max\{dp[i]\}$。
但是时间复杂度为 $O(nk)$,显然会超时。
注意到 $\text{sum}[i]$ 可以直接提出,即 $dp[i]=\max\{dp[j]\}+\text{sum}[i]$,所以我们只需用一个单调队列来维护 $dp[i]$ 的最值,复杂度可以降低为 $O(n)$。