首页 > 其他分享 >[CF1648D]Serious Business 题解

[CF1648D]Serious Business 题解

时间:2023-03-06 23:13:15浏览次数:49  
标签:max le Business 题解 线段 修改 CF1648D dp 式子

[CF1648D]Serious Business 题解

首先容易想到一个 \(dp\) 转移式子:

\[dp_{i}=\max_{j\le i} s_{1,j}-cost_{j,i}-s_{2,j-1}+s_{2,i}+s_{3,n}-s_{3,i-1} \]

其中 \(dp_i\) 表示到第 \(2\) 行的第 \(i\) 列处移动至第 \(3\) 行的最大价值, \(cost_{j,i}\) 表示第 \(2\) 行 \(j\) 到 \(i\) 联通的最小代价, \(s_{i}\) 为第 \(i\) 行的前缀和数组。

其余部分都是可以预处理的,只有 \(cost_{j,i}\) 这一块儿是没法快速求出的,其实可以考虑枚举哪一条线段包含了 \(i\) 然后进行转移,大概形式为:

\[dp_{i}=\max_{l_j\le i \le r_j}val_{j}+s_{2,i}+s_{3,n}-s_{3,i-1} \]

其中 \(val_j\) 表示选择的最靠右的线段为 \(j\) 时,并且当前没有走到 \(i\) 的最大价值。

而 \(val_j\) 其实有两种情况:第一种是只使用了 \(j\) 这一个线段;另一种是使用了超过一条线段,并且所有选择的线段的并也是一条完整的线段。

两种情况的 \(dp\) 式子为:

\[\left\{ \begin{matrix} &dp_i&=&\max_{l_j\le i\le r_j}&\{\max_{l_j\le t\le i}s_{1,t}-s_{2,t-1}\}-k_j+s_{2,i}+s_{3,n}-s_{3,i-1}\\\\ &dp_{i}&=&\max_{l_j\le i\le r_j}&dp_{l_j-1}-k_j-s_{2,l_j-1}+s_{2,i}+s_{3,n}-s_{3,i-1} \end{matrix} \right. \]

先看第一个式子。因为是求区间 \(\max\) ,所以说可以考虑用一下线段树去优化转移。

因为是 \(\max\) 套 \(\max\) ,所以说我们线段树去维护转移点时也可以分两段去维护。第一个维护的值是区间的 \(\min k_j\) ,第 \(j\) 条线段对于 \(i\) 点转移的额外贡献为 \(k_j\) ,影响区间为 \([l_j,r_j]\) ,所以可以写一个区间取 \(\min\) 。

然后看内层枚举 \(t\) 如何维护。考虑 \(t\) 能作为哪些 \(i\) 的决策点,显然是 \(i\in[t,n]\) 的点,所以说可以再写一个区间取 \(\max\) ,每次在一个后缀插入 \(s_{1,t}-s_{2,t-1}\) 。

有了这两个值的维护,也就可以同时求出第一个式子的转移式子了。

但是有两个区间修改,还要动态维护这两个值的差的最大值,不是很好维护,这里有一个小 \(trick\) 可以用一下:

因为考虑到每一次 \(t\) 的值的修改都是一个后缀,而我们插入线段没有必要一次性全插进去,可以当进行 \(dp_i\) 的转移时再把所有 \(l_j\le i\) 的线段插入线段树,所以说其实可以把线段的修改由 区间修改 转变为 前缀修改 ,所以说其实可以再进一步抽象,把 前缀修改 变为在 \(r_j\) 处的单点修改,并且查询由 单点查询 变为 后缀查询 ,可以发现,这样正确性是有保障的(其实前缀变成单点,然后查询再把后缀查了,就是相当于把原来能够干预到 \(i\) 的所有线段都计算了一遍),而这样修改只有一个区间修改,就会非常好操作。

现在说一下第二个式子,这个就比较简单了,可以维护一个 \(set\) ,维护当前所有 \(l_j\le i\le r_j\) 的线段的 \(dp_{l_j-1}-k_j-s_{2,l_j-1}\) 的值,然后当 \(i>r_j\) 时就把 \(j\) 对应的值删掉即可。

下面给出 代码

标签:max,le,Business,题解,线段,修改,CF1648D,dp,式子
From: https://www.cnblogs.com/zyc070419-blog/p/17185888.html

相关文章

  • NOI2023春测题解
    NOI2023春测题解目录NOI2023春测题解更好的阅读体验戳此进入游记戳此进入T1LG-P9117[春季测试2023]涂色游戏题面SolutionCodeT2LG-P9118[春季测试2023]幂次题面So......
  • 春季测试2023全题解
    T1涂色游戏非常困难的题目,我们需要记录每一行/每一列最后一次被修改的时间以及被修改成什么颜色。输出的时候每一个格子是受行影响还是列影响即可。复杂度\(O(nm)\)。......
  • [SDOI2019] 移动金币 题解
    首先考虑一个状态什么时候是合法的。不难把游戏过程抽象为阶梯Nim博弈。根据阶梯Nim博弈的结论,先手必胜当且仅当奇数位上的异或和不为0。考虑将本题中每个棋子后面......
  • AcWing 4490. 染色题解
    题目描述样例输入:612215211111输出3算法描述思路我们以样例为例讲讲思路。如何确保dfs能顺利便利呢,我们可以使用链式前向星来存图(树)C++代......
  • AcWing 4495. 数组操作题解
    思路此题较为简单,简述一下思路。从小到大排序,每次选取最小值,只要不为0即可每次都为序列减去一个数字太慢,但每个数又减去的数字一样,所以可以用minus记录每个数要减去的数......
  • 3.2 L5-NOIP训练29 测试题解
    3.2L5-NOIP训练29测试题解码创Contest#530(出题人写中文也要句句都打分号吗!!)A.老司机的压缩包(数论)题面老司机最近得到了一个奇怪的压缩包,听说里面有十分厉害的东西......
  • 3 月 1 日测试题解
    3月1日测试题解T1题意给你一个\(n\timesm\)的01矩形,求一个面积最大的不包含数字1的矩形。\(n,m\le1000\)。思路首先,这道题的数据水到了什么程度呢?\(O(n......
  • MySQL Workbench 8.0 点击Server Status面板Could not acquire management access for
    转载自:MySQLWorkbench8.0点击ServerStatus面板Couldnotacquiremanagementaccessforadministration报错问题解决Win10安装MySQLWorkbench8.0后连接MySQL服务......
  • LG-P3603 雪辉 题解
    LG-P3603雪辉Solution目录LG-P3603雪辉Solution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面给定$n$个点的树,存在点权,多次询问每次......
  • [ABC273G] Row Column Sums 2 题解
    [ABC273G]RowColumnSums2Solution目录[ABC273G]RowColumnSums2Solution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面给定$n$,给......