【某NOIP模拟赛T2 - 旅游】--线段树优化 DP 的魅力

题意:

数轴上在起点 s 和终点 t 间的整点中有 n 个关键点,第 i 个关键点位置为 ci,可获得 mi 的价值。你可以从起点开始,每次跳至多 z 个点(跨过中间的点),而每到达一个 s 以外的点需要支付 a 的代价,求走到终点的最大价值。

0scit109,n105

这种题目一眼 DP 好吧​

fi 表示前 i 个关键点的答案,首先考虑 O(n2) 的暴力转移

fi=min{fj+cicjDaimi}

然后有个蠢蛋打表打小了,以为满足决策单调性QwQ

发现优化的瓶颈在于这个烦人的上取整除法

众所周知,上下取整,取模之类的运算都可以拆成普通的运算

发现 ci,cj 同时加 kD 并不会影响上取整(即其相对大小关系)带来的贡献,那么我们不妨将这个取整拆开?

ci=kiD+bi

成功将贡献转移到 bi,bj 的大小关系上!

fi=min{fj+(kikj+bibjD)ai}mibi,bj[0,D)bibj(D,D)

这样我们就让烦人的上取整简化成 [bi>bj] ,于是丢到以 bi 为下标的 最小值权值线段树 里去做就行了

总结:拆 DP 中难求的贡献?权值线段树!

posted @   慕斯ひいきする  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示