区间 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)\)。
考虑优化。容易发现,此时操作一、操作二和操作三的第一种情况复杂度都是对的。只有操作二、操作三的第二种情况需要枚举长度,时间复杂度 \(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)\),可以通过此题。
标签:题解,sum,长度,len,贡献,ABC303,max,操作 From: https://www.cnblogs.com/syzqwq/p/18040520