ABC303 G 题解

区间 DP。

\(f_{l,r}\) 表示只考虑 \([l,r]\),先手得分减后手得分的最大值(并不关心谁是先手谁是后手),区间长度 \(len=r-l+1\)

然后对三种情况分别讨论:

  • 使用操作一,此时取掉左/右端点的部分先手后手互换,对答案的贡献为 \(\max(a_l-f_{l+1,r},a_r-f_{l,r-1})\)

  • 使用操作二,继续分讨:

    • \(len\le B\):直接全部取走,贡献为 \((\sum_{i=l}^{r}a_i)-A\)
    • \(len>B\):考虑将 \(B\) 的长度分配给前缀和后缀,贡献为 \(\max_{i=0}^{B}(\sum_{i=l}^{l+i-1}a_i)+(\sum_{i=r-(B-i)+1}^{r}a_i)-A-f_{l+i,r-(B-i)}\)
  • 操作三同理:

    • \(len\le D\):直接全部取走,贡献为 \((\sum_{i=l}^{r}a_i)-C\)
    • \(len>D\):考虑将 \(D\) 的长度分配给前缀和后缀,贡献为 \(\max_{i=0}^{D}(\sum_{i=l}^{l+i-1}a_i)+(\sum_{i=r-(D-i)+1}^{r}a_i)-C-f_{l+i,r-(D-i)}\)

然后对上述贡献取 \(\max\) 就是 \(f_{l,r}\) 的值。

用前缀和维护一下即可做到 \(O(n^3)\)

Code

考虑优化。容易发现,此时操作一、操作二和操作三的第一种情况复杂度都是对的。只有操作二、操作三的第二种情况需要枚举长度,时间复杂度 \(O(n)\)

考虑对 \(len\) 相同的区间同时处理:记 \(j=B-i\)\(i\) 就是操作二转移方程里的,操作三同理),\(s(l,r)\) 表示 \([l,r]\) 的区间和。转化一下转移方程:

\[\max_{i=0}^{B}s(l,l+i-1)+s(r-j+1,r)-A-f_{l+i,r-j} \]

\[=\max_{i=0}^{B}s(l,r)-s(l+i,r-j)-A-f_{l+i,r-j} \]

这个时候我们发现 \(s(l,r)\)\(A\) 是定值。提出来,就变成了:

\[s(l,r)-A-\min_{i=0}^{B}s(l+i,r-j)+f_{l+i,r-j} \]

现在考虑维护后面这坨东西。

容易发现,\([l+i,r-j]\) 这个区间的长度是不变的,都为 \(len-B\)。令 \(g_i=f_{i,i+len-B-1}+s(i,i+len-B-1)\)。此时发现方程就是

\[s(l,r)-A-\min_{i=l}^{l+B}g_i \]

然后直接用 ST 表维护 \(\min g_i\) 即可。对于不同的 \(len\) 直接重构即可。时间复杂度 \(O(n^2\log n)\),可以通过此题。

Code

posted @ 2024-02-28 15:16  Southern_Dynasty  阅读(16)  评论(0)    收藏  举报