求解答刚刚结束的 CF892 的E题的题解
  • 板块学术版
  • 楼主dark_moon
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/8/13 01:23
  • 上次更新2023/11/3 04:10:25
查看原帖
求解答刚刚结束的 CF892 的E题的题解
417018
dark_moon楼主2023/8/13 01:23

E题只写出了朴素的解法,看题解写得理解了一部分,但感觉还是很困惑,有没有大佬讲解一下qwq

附 - 我的翻译工具的翻译结果:我们将区间[l;r][l; r]的值称为f(l,r)=abs(al−br)+abs(ar−bl)f(l, r) = abs(a_l - b_r) + abs(a_r - b_l)。

我们定义dp[n1][k1]dp[n1][k1]为长度为k1k1且以n1n1结尾的区间的最大值。

重新计算的明显方法如下:

dp[n1][k1]=max(dp[n1−1][k1],dp[n1−l][k1−l]+f(n1−l+1,n1),1≤l≤k1)dp[n1][k1] = max(dp[n1 - 1][k1], dp[n1 - l][k1 - l] + f(n1 - l + 1, n1), 1 \le l \le k1)。

这种方法的时间复杂度为O(NK2)O(NK^2),速度太慢。

现在考虑以下情况:不再计算区间[l;r][l; r]的绝对值,而是考虑以下四种组合的最大值:bl−ar+br−alb_l - a_r + b_r - a_l,bl−ar−br+alb_l - a_r - b_r + a_l,−bl+ar+br−al-b_l + a_r + b_r - a_l,−bl+ar−br+al-b_l + a_r - b_r + a_l。我们可以看到,这总是给我们正确的绝对值答案,因为我们检查了所有可能性。

现在我们可以将dp状态看作一张表,并注意到我们在对角线上进行重新计算(我们重新计算所有具有相同n1 - k1值的状态)。

现在,对于每个“对角线”,我们维护四个最大组合:dp[n1][k1]+bk1+ak1dp[n1][k1] + b_{k1} + a_{k1},dp[n1][k1]−bk1+ak1dp[n1][k1] - b_{k1} + a_{k1},dp[n1][k1]+bk1−ak1dp[n1][k1] + b_{k1} - a_{k1},dp[n1][k1]−bk1−ak1dp[n1][k1] - b_{k1} - a_{k1},当我们想要重新计算状态dp[n2][k2]dp[n2][k2]时,我们只需考虑这四种可能性。

2023/8/13 01:23
加载中...