ABC373F 题解

容易发现这是一个完全背包问题,我们设状态 fi,j 表示前 i 个物品使用了 j 个容量的最大价值。

容易写出转移方程式:fi,j=maxk=0jwfi1,jkw+kvk2

直接 dp 是 O(n3)。考虑对这个 dp 进行优化。

上面的方程容易写成滚动数组的形式。不妨设上一维状态为 g,这一维为 f

Solution 1

将后面的 kvk2 记为 T(k),则一段区间 [l,r] 价值记为 w(l,r),则 w(l,r)=T(rl+1)。发现若对于决策点 a,a+1,b,b+1,始终满足 w(a,b)+w(a+1,b+1)w(a,b+1)+w(a+1,b)

j 按对 w 取模后的值分类后使用决策单调性优化即可。时间复杂度 O(n2logn)

Solution 2

同样对 j 按对 w 取模后的值分类。改写 dp 式子:fi=maxgj+(ij)v(ij)2

对式子拆分:fi=gj+ivjvi2j2+2ij

移项得 gjjvj2=2ij+i2+fiiv

容易发现这是斜率优化的形式,且 k=2i 为单调的, x=i 也是单调的,使用单调队列可以优化到 O(n2)


决策单调性:code

斜率优化:code

还是建议写决策单调性,码量小细节少。

posted @   g1ove  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示