题解:P10236 [yLCPC2024] D. 排卡
把删数反过来变成加数,初始双端队列为空,每次可以将左边或右边的数加入双端队列。
因为任何时候加的都是一个区间,所以考虑区间 dp,设
边界:
状态转移方程:
-
对于
dp_{i,j,0} ,新加的数是a_i ,从dp_{i+1,j,0/1} 转移过来,上一次可以加a_{i+1} 或a_j 。所以dp_{i,j,0}=\max(dp_{i+1,j,0}+a_i^{a_j},dp_{i+1,j,1}+a_i^{a_i+1}) 。注意我们把原问题反过来了,所以得出的b 数组也是反过来的,dp 时要把它反回去。 -
对于
dp_{i,j,1} ,新加的数是a_i ,从dp_{i,j-1,0/1} 转移过来,上一次可以加a_i 或a_{j-1} 。所以dp_{i,j,1}=\max(dp_{i,j-1,0}+a_i^{a_j},dp_{i,j-1,1}+a_j^{a_j-1}) 。
答案: