E题只写出了朴素的解法,看题解写得理解了一部分,但感觉还是很困惑,有没有大佬讲解一下qwq
附 - 我的翻译工具的翻译结果:我们将区间[l;r]的值称为f(l,r)=abs(al−br)+abs(ar−bl)。
我们定义dp[n1][k1]为长度为k1且以n1结尾的区间的最大值。
重新计算的明显方法如下:
dp[n1][k1]=max(dp[n1−1][k1],dp[n1−l][k1−l]+f(n1−l+1,n1),1≤l≤k1)。
这种方法的时间复杂度为O(NK2),速度太慢。
现在考虑以下情况:不再计算区间[l;r]的绝对值,而是考虑以下四种组合的最大值:bl−ar+br−al,bl−ar−br+al,−bl+ar+br−al,−bl+ar−br+al。我们可以看到,这总是给我们正确的绝对值答案,因为我们检查了所有可能性。
现在我们可以将dp状态看作一张表,并注意到我们在对角线上进行重新计算(我们重新计算所有具有相同n1 - k1值的状态)。
现在,对于每个“对角线”,我们维护四个最大组合:dp[n1][k1]+bk1+ak1,dp[n1][k1]−bk1+ak1,dp[n1][k1]+bk1−ak1,dp[n1][k1]−bk1−ak1,当我们想要重新计算状态dp[n2][k2]时,我们只需考虑这四种可能性。