(原来的题解没得了,只好重写一份)

斜率优化一般是,\(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 - 斜率优化笔记的更多相关文章

  1. 【BZOJ-4518】征途 DP + 斜率优化

    4518: [Sdoi2016]征途 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 230  Solved: 156[Submit][Status][ ...

  2. 【BZOJ-3437】小P的牧场 DP + 斜率优化

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 705  Solved: 404[Submit][Status][Discuss ...

  3. 【BZOJ-1010】玩具装箱toy DP + 斜率优化

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8432  Solved: 3338[Submit][St ...

  4. 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...

  5. BZOJ 1096: [ZJOI2007]仓库建设(DP+斜率优化)

    [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在 ...

  6. 学渣乱搞系列之dp斜率优化

    学渣乱搞系列之dp斜率优化 By 狂徒归来 貌似dp的斜率优化一直很难搞啊,尤其是像我这种数学很挫的学渣,压根不懂什么凸包,什么上凸下凸的,哎...说多了都是泪,跟wdd讨论了下,得出一些结论.本文很 ...

  7. DP斜率优化总结

    目录 DP斜率优化总结 任务安排1 任务计划2 任务安排3 百日旅行 DP斜率优化总结 任务安排1 首先引入一道题,先\(O(N^2)\)做法:分别预处理出\(T_i,C_i\)前缀和\(t[i],c ...

  8. HDU 3507 [Print Article]DP斜率优化

    题目大意 给定一个长度为\(n(n \leqslant 500000)\)的数列,将其分割为连续的若干份,使得 $ \sum ((\sum_{i=j}^kC_i) +M) $ 最小.其中\(C_i\) ...

  9. dp斜率优化

    算法-dp斜率优化 前置知识: 凸包 斜率优化很玄学,凭空讲怎么也讲不好,所以放例题. [APIO2014]序列分割 [APIO2014]序列分割 给你一个长度为 \(n\) 的序列 \(a_1,a_ ...

随机推荐

  1. C#——时间之不同国家的显示格式

    对于时间的显示,不同的地方有不同的时间格式,代码如下: public class Common_DateFormat { public Common_DateFormat() { // // TODO ...

  2. 栈面板类StackPane?

    创建栈面板,将在其上放置两个按钮,并用样式属性设置按钮和栈面板的外观样式. package yuan; //栈面板的应用 import javafx.application.Application; ...

  3. 各个JDK版本新语法糖

    java5语法扩充 自动装箱.泛型.动态注解.枚举.可变长参数.循环遍历等语法 JDK7 fork/join jdk8  二进制数的原生支持.switch语句中支持string <>操作符 ...

  4. 记一次Jquery学习引发的学习思考

    学习廖雪峰Jquery的教程关于表单的操作时,被最后的习题给困住了,在一番思索后无奈地决定去看博客评论下的答案,却发现自己看不懂,遂以为是对Jquery的了解还不够深,于是便在网上疯狂搜索关于Jque ...

  5. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记

    2.5.6 MongoDB -- 问答系统 MongoDB 数据库设计 API 实现概述 MongoDB 数据库设计 设计优化 内嵌(mongo)还是引用(mysql) 数据一致性 范式:将数据分散到 ...

  6. Adnc如何本地调试 - 一个轻量级的.Net Core微服务开发框架

    前言     Adnc是一个轻量级的.Net Core微服务开发框架,同样适用于单体架构系统的开发.     如果只是想本地调试,只需要安装必备软件,必备软件除开发工具外,其它软件建议大家都使用`do ...

  7. hadoop集群中zkfc的作用和工作过程

    一. 简单了解NameNode的ZKFC机制 NameNode的HA可以个人认为简单分为共享editLog机制和ZKFC对NameNode状态的控制 一般导致NameNode切换的原因 ZKFC的作用 ...

  8. 日常ie兼容问题(持续整理)

    1.关于new Date()格式为何要转成y/m/d格式 IE不会识别时间状态为"y-m-d"的形式,如果获取的new Date("2020-05-01") 那 ...

  9. 计算机考研复试真题 a+b(大数加法)

    题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据,对于每组数据, 输出a+b的值. 示例1 输入 ...

  10. 剑指offer 面试题10.2:青蛙变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 编程思想 因为n级台阶,第一步有n种跳法:跳1级.跳2级.到跳n级跳1级,剩下 ...