dp - 斜率优化笔记
(原来的题解没得了,只好重写一份)
斜率优化一般是,\(dp\) 是枚举一个 \(i\),然后前面找一个 \(j\),式子中有些和 \(j\) 有关,有些和 \(i\) 有关,有些和俩都有关。
过程中,我们维护一个单调队列,它们可能作为最优的转移位置。其中队首是最优的,其它的是 可能 成为最优的(现在不是,可能以后)
核心步骤:把每个决策转化成平面直角坐标系上的点,然后从几何的角度考虑哪些点可能是最优的,哪些不可能。
我们发现这个性质好像很妙。所以说,不是所有题都可以斜率优化的。
这些说的肯定非常迷惑,看个实际的
示例
最经典的入门题 HNOI2008玩具装箱
转移方程为 \(f_i=min(f_j+(s_i-s_j+i-j-L-1)^2)\),非常 simple
我们令和 \(i\) 有关的为 \(a_i=s_i+i\),和 \(j\) 有关的为 \(b_j=s_j+j+L+1\)
那 \(f_i=min(f_j+(a_i-b_j)^2)\)
拆开 \(f_i=min(f_j+a_i^2-2a_ib_j+b_j^2)\)
假设 \(j\) 是最优的那个转移,那
\(f_i=f_j+a_i^2-2a_ib_j+b_j^2\)
这个式子里面,注意到 \(2a_ib_j\) 这一项是同时与俩有关的。
主体思想
我们把和 \(i\) 有关的那个 \(2a_i\) 看成斜率,和 \(j\) 有关的 \(b_j\) 看成 \(x\)。那 \(y\) 肯定也要和 \(j\) 有关,移到右边。我们的主体思想是把 \(f_i\) 变成一个截距。所以把 \(f_i\) 和一些只和 \(i\) 有关的东西放到左边。
(这一步就体现出“斜率”了)
变成 \(2a_ib_j+f_i-a_i^2=b_j^2+f_j\)。其中 \(x=b_j\),\(y=b_j^2+f_j\)。
令 \(P_j\) 作为第 \(j\) 个决策点,坐标为 \((b_j,b_j^2+f_j)\)。
那现在问题转化成了:找到一个 \(j<i\),使得过点 \(P_j\) 的斜率为 \(2a_i\)(定值)的直线的截距加上 \(a_i^2\)(定值)最小。
手画几张图可以得出以下结论:
- 如果队首的斜率 \(<2a_i\),那这一次转移队首就比队首的下一个要劣(画图发现);而且 \(a_i\) 是单增的,那以后肯定都劣,直接弹队首
- 斜率应该是单调递增的 (这个要手画了)。所以如果新来的和原队尾组成的斜率,小于原队尾和原队尾上一个的斜率,那这个队尾就废了
然后就维护一个单调队列就完事了。复杂度是 \(O(n)\) 的,\(log\) 都不带。
dp - 斜率优化笔记的更多相关文章
- 【BZOJ-4518】征途 DP + 斜率优化
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 230 Solved: 156[Submit][Status][ ...
- 【BZOJ-3437】小P的牧场 DP + 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 705 Solved: 404[Submit][Status][Discuss ...
- 【BZOJ-1010】玩具装箱toy DP + 斜率优化
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8432 Solved: 3338[Submit][St ...
- 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...
- BZOJ 1096: [ZJOI2007]仓库建设(DP+斜率优化)
[ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在 ...
- 学渣乱搞系列之dp斜率优化
学渣乱搞系列之dp斜率优化 By 狂徒归来 貌似dp的斜率优化一直很难搞啊,尤其是像我这种数学很挫的学渣,压根不懂什么凸包,什么上凸下凸的,哎...说多了都是泪,跟wdd讨论了下,得出一些结论.本文很 ...
- DP斜率优化总结
目录 DP斜率优化总结 任务安排1 任务计划2 任务安排3 百日旅行 DP斜率优化总结 任务安排1 首先引入一道题,先\(O(N^2)\)做法:分别预处理出\(T_i,C_i\)前缀和\(t[i],c ...
- HDU 3507 [Print Article]DP斜率优化
题目大意 给定一个长度为\(n(n \leqslant 500000)\)的数列,将其分割为连续的若干份,使得 $ \sum ((\sum_{i=j}^kC_i) +M) $ 最小.其中\(C_i\) ...
- dp斜率优化
算法-dp斜率优化 前置知识: 凸包 斜率优化很玄学,凭空讲怎么也讲不好,所以放例题. [APIO2014]序列分割 [APIO2014]序列分割 给你一个长度为 \(n\) 的序列 \(a_1,a_ ...
随机推荐
- leetcode 274H-index
public int hIndex(int[] citations) { /* 唠唠叨叨说了很多 其实找到一个数h,使得数组中至少有h个数大于等于这个数, 其他N-h个数小于这个数,h可能有多个,求最 ...
- JavaDailyReports10_19
今日学习超链接 1.文本链接 使用一对<a>标签 格式:< href ="目标URL" target="目标窗口"> 指针文本 & ...
- TIDB简介
摘自https://pingcap.com/docs-cn/ TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical P ...
- v-on以及v-show、v-if的一些小杂碎
v-on的参数问题: 当通过methods中定义方法,以供@click调用时,需要注意参数问题: 情况一:如果该方法不需要额外参数,那么方法后的()可以不添加.但是注意:如果方法本身中有一个参数,那么 ...
- 在onelogin中使用OpenId Connect Authentication Flow
目录 简介 OpenId Connect和Authentication Flow简介 onelogin的配置工作 使用应用程序连接onelogin 程序中的关键步骤 总结 简介 onelogin是一个 ...
- http ContentLength 为0 下载问题
如图 通过http 下载某个东西 , WebResponse response = request.GetResponse(); response 调试如图 ContentLength 为0 ...
- 性能超四倍的高性能.NET二进制序列化库
二进制序列化在.NET中有很多使用场景,如我们使用分布式缓存时,通常将缓存对象序列化为二进制数据进行缓存,在ASP.NET中,很多中间件(如认证等)也都是用了二进制序列化. 在.NET中我们通常使用S ...
- 网络设置-指定ip
1 克隆centos6.设置网卡 vim /etc/udev/rules.d/70-persistent-net.rules 确定光标所在的位置 d3d删除以下三行,更改NAME为0 vim /etc ...
- MySQL常用的数据类型和字段属性
数据类型 数值 tinyint 十分小的数据 1个字节 smallint 较小的数据 2个字节 mediumint 中等大小的数据 3个字节 int 标准的整数 4个字节 常用 bigint 较大的数 ...
- 为什么不建议用var
看了这个例子估计你就会明白了 var a = 'global'; function test() { if (!a) { var a = 'part'; } console.log(a); } tes ...