题解:AT_joisc2019_e ふたつの料理 (Two Dishes)

· · 题解

显然有暴力 \rm dpf_{i,j} 表示第一个序列进度是 i,第二个序列进度是 j,显然我们知道这个状态的时刻是 suma_i+sumb_j

二维 \rm dp 考虑扫描线一维变成整体 \rm dp,每次 f_{i-1}\to f_i 的时候我们会进行前缀加,并把若干个 j-1\to j 的转移系数 v_j 变成 0,然后从左往右进行转移。

考虑动态维护 d_j=f_j-f_{j-1}-v_j,显然 d_j\ge 0,否则就会触发 v_j 的转移。

考虑仅仅变化一个 v_j 造成的影响:

同样的,考虑仅仅进行前缀加(对前缀 jx)造成的影响:

现在的问题是,我们即将同时变化多个 v_j,有正有负,还要进行一个前缀加,在 \rm dp 中这些“事件”的时刻都是同时发生的,那么我们自然要问:是多次做上面这个过程吗?按照什么顺序做?

事实上每个操作只会影响后缀,且与前缀无关,所以要想它们同时执行,从后往前做即可。

code。