随笔 - 51  文章 - 0  评论 - 6  阅读 - 443

CF1648D题解

si,j 表示i 行前 j的价值和(即前缀和)。
之前模拟赛遇到过类似的线段覆盖问题,考虑 dp,设 fi 表示从 (1,1) 走到 (2,i) 且所选线段的右端点恰好覆盖到 i 的最大收益
将所有线段按右端点排序,然后对于 i 枚举以 i 为右端点的线段 x 进行转移。
转移有两种:

  • 从上一个线段的右端点走过来,即 maxLx1ji1fj+s2,is2,j,可以用线段树维护。
  • 直接从 (1,1) 走到 (2,i),即 maxLxjis1,js2,j1+s2,i,同样可以用线段树维护。

但上述 dp 存在问题,即线段覆盖的最右端点不一定是最后走到的最右端点,但是至多只有最后一个区间的右端点没有被走到。
image

枚举没有被走满的区间 x,考虑上一个线段的右端点 iLx1iRx1),以及拐点 j,为了方便,记 gj=s3,ns3,j1+s2,j,于是就变成了询问区间 [Lx1,Rx] maxi<jfis2,i+gj这个也可以用线段树维护,具体地,对于每个区间维护 ans 和区间 f,g 最大值,合并的时候取 左区间的 ans,右区间的 ans,左区间 fmx 和右区间 gmx 的和 三个值的最大值。

注意只用一条线段的情况特殊考虑,记 ai=s1,is2,i1bi=s3,ns3,i1+s2,i,然后枚举用的区间,又变成询问 ai+bj 的最大值,处理方法同上。

posted on   cool_tyl  阅读(17)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示