省选模拟6

省选模拟6

只会T1,给大家磕头了。

可以根据已知信息得到一个DP方程。

fi,j=max(fi1,j+[jXi]Pi,fi,j1+[iYj]Qj)

fn,m

走格子形式 dp 优化可以考虑整行转移

可以写作:

fi,j=maxkj(fi1,k+[kXi]Pi+t=k+1j[iYt]Qt)

不妨设 limi,j=[iYj]Qj,slimi,j=tjlimi,t

有:

fi,j=maxkj(fi1,k+[kXi]Pislimi,k)+slimi,j

gi,j=fi,jslimi,j

有:

gi,j=maxkj(gi1,k+[kXi]Pi+slimi1,kslimi,k)

注意到所有的 slimi1,kslimi,k 可以总结为 O(m) 次后缀修改,然而我们做完修改后是做前缀最大值。

考虑将其转化为前缀修改,也就是看作全局加 Qt,然后看作 [i>Yt]Qt

那么现在就是一堆前缀加减,操作完后再做前缀 max

发现单次前缀加减后维护前缀 max 是容易的,只需要线段树上二分并做区间赋值。

这启发我们研究这些操作,我们将这一堆前缀加减,形如 (r,w) 的二元组按照 r 从小到大排序。

在执行操作 (ri,wi) 后,更新 [ri1+1,ri] 的前缀最大值即可。

辅助加入 (m,0)

这样操作保证了前面操作不影响后续,因此是正确的。

这启发我们前缀修改的性质。

posted @   spdarkle  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2023-02-02 树链剖分习题集
2023-02-02 树链剖分入门
点击右上角即可分享
微信分享提示