首页 > 其他分享 >斜率优化DP

斜率优化DP

时间:2023-11-12 12:55:24浏览次数:34  
标签:text 斜优 凸包 斜率 DP 优化 单调

使用场景

状态 \(O(n)\),转移 \(O(n)\),只涉及 \(i,j\) 两个未知量,\(j\) 的取值范围的左、右端单调,可以把 \(f_i\) 当做截距维护上(max)、下(min)凸包。需要注意的是,它作用不仅仅可以优化 DP,本质是求某些最值,\(\color{red}\text{example}\)

也可以在\(\color{pink}\text{一些题}\)中求斜率的最值,这时就是朴素的单调队列可以解决的。

以下只讨论 DP 中的应用,其他模型还需要靠灵光一闪去发现。

列式

设当前求 \(f_i\),将只与 \(j\) 有关的项当做 \(y\),交叉项为 \(kx\),只与 \(i\) 有关的当做 \(b\),得到一个一次函数解析式。

不交换 \(i,j\) 所表示的意义的原因:只知道所有 \((k,b)\) 和 \(x\),求 \(y\) 的最值,这是李超树,没有单调性,时间最少 \(O(n\log n)\)。

1.不能斜优DP

条件

若 \(x\) 不单调,无法直接斜优。

感性理解

考虑维护凸包的过程,发现会涉及在中间插入值,就需要平衡树/set去实现。也可以改变定义,转为李超树。

强行斜优

发现这是在一个偏序问题中进行凸包维护加DP,可以离线+CDQ优化。先按 \(k\) 排序,再以 \(x\) 为关键字归并。要注意到前后的依赖关系:\(\text{左区间递归}\rightarrow\text{算贡献}\rightarrow\text{右区间递归}\)。

2.一般斜优DP

条件

\(x\) 单调。

目前只见过单调不降,但单调不增也是可以做的(应该差不多?)。

维护凸包,对斜率进行二分,找到一个分界点,即为决策点。

3.特殊斜优DP

条件

\(x\) 单调的同时 \(k\) 也单调。

这时有决策单调性,决策点在凸包上总是向一边移动的。这时可以使用单调数据结构进行维护。

可以根据取 \(min/max\)、\(x\) 单增/减、\(k\) 单增/减单调栈/队列维护上/下凸包

标签:text,斜优,凸包,斜率,DP,优化,单调
From: https://www.cnblogs.com/mRXxy0o0/p/17827012.html

相关文章

  • G - Cut and Reorder 状压DP
    我是题目链接首先显然先一操作,然后二操作这样不会影响最终结果一眼状压DP,选出一些a从前往后塞,f[i][j]表示选出的a状态为i,且结尾为j时最小花费转移就看上一个状态的结尾(设为k)和当前结尾(设为j)在a里的下标是否顺着挨着(就是j=k+1),不是顺着挨着就要加个c这样会tle#include<bits/std......
  • 【小沐学前端】Windows下搭建WordPress(二、相关工具安装)
    1、简介WordPress是基于PHP和MySQL的免费开源内容管理系统(CMS)。它是全球使用最广泛的CMS软件,截至2019年5月,它为排名前1000万个网站中提供了超过30%的支持,并拥有在使用CMS构建的所有网站中,估计有60%的市场份额。2、搭建环境2.1Nginx配置nginx.conf,文件在nginx目录下的conf文件夹......
  • MATLAB热传导方程模型最小二乘法模型、线性规划对集成电路板炉温优化
    原文链接:https://tecdat.cn/?p=34230原文出处:拓端数据部落公众号分析师:LuoyanZhang集成电路板等电子产品生产中,控制回焊炉各部分保持工艺要求的温度对产品质量至关重要。通过分析炉温曲线,可以检查和改善产品生产质量,提高产量和解决生产问题。高效温度曲线测试系统的必要组件包......
  • Redis服务端优化
    持久化配置Redis的持久化虽然可以保证数据安全,但也会带来很多额外的开销,因此持久化请遵循下列建议:①用来做缓存的Redis实例尽量不要开启持久化功能②建议关闭RDB持久化功能,使用AOF持久化③利用脚本定期在slave节点做RDB,实现数据备份④设置合理的rewrite阈值,避免频繁的bgrewrite⑤......
  • DP做题记录
    蒟蒻DP太菜了QAQ。一点体会:DP就是如何通过最少的信息确定最优解。P5664[CSP-S2019]Emiya家今天的饭思考了一下,发现第3个要求很难直接搞,于是考虑正难则反,用总方案数减去不符合要求的方案数。求总方案数:\(g_{i,j}\)表示在前\(i\)行中选\(j\)个点的方案数,则\[g_{i,j}=g_......
  • Spark优化
    意识篇类型转换优化前:valextractFields:Seq[Row]=>Seq[(String,Int)]={(rows:Seq[Row])=>{varfields=Seq[(String,Int)]()rows.map(row=>{fields=fields:+(row.getString(2),row.getInt(4))}) fields}}优化后:valextr......
  • 11 11 vue3代码优化
     使用axios发送异步请求是这种格式,现在异步请求都封装到api中。说法如下:接口调用的js代码一般都会封装到js文件中,并一函数的形式暴露给外部,例如: 这张图片包括了没有参数和有参数的两种情况 然后在组件中的script中调用函数就行,但这样不行,好像跟什么同步异步有关,反正这样......
  • P3842-DP【黄】
    想搜索到最后一层,就必得先完成前面层的搜索任务,这构成了对状态转移的启示,即当前层的DP值应该是此前层转移过来后得到的最佳值。但这道题看数据范围应该不能用二维数组,抱着侥幸的心理我使用了动态二维数组,dpij表示以第i层第j个为终点时的答案,结果MLE了,喜提42分,详见CODE-1。后来意......
  • 状态机模型DP
    //http://ybt.ssoier.cn:8088/problem_show.php?pid=1302#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+10;intdp[N][3][3],n,w[N],t;intmain(){cin>>t;while(t--){cin>>n;intres=0;memset(......
  • [题解] AT_dp_w Intervals
    Intervals有\(m\)条形如\((l,r,a)\)的限制,表示如果\(s_{[l,r]}\)中有1就会有\(a\)的价值。你要求长度为\(n\)的01串的价值的最大值。\(n,m\le2\times10^5\)。将每个限制挂到右端点上,在右端点处计算贡献。然后我们就只关心最后一个1出现的位置了。......