斜率优化

一、简单DP

首先从一道简单题引入。

[IOI2002]任务安排

Description

N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成)。每个任务的费用是它的完成时刻乘以一个费用系数ci。请确定一个分组方案,使得总费用最小。

例如:S=1;T={1,3,4,2,1};F={3,2,3,3,4}。如果分组方案是{1,2}、{3}、{4,5},则完成时间分别为{5,5,10,14,14},费用C={15,10,30,42,56},总费用就是153。

Input

第一行是N(1<=N<=5000)。

第二行是S(0<=S<=50)。

下面N行每行有一对数,分别为Ti和ci,均为不大于100的正整数,表示第i个任务单独完成所需的时间是Ti及其费用系数ci。

Output

一个数,最小的总费用。

Sample Input

5

1

1 3

3 2

4 3

2 3

1 4

Sample Output

153

Solution

“光着身子”的动态规划。

设F[i,j]表示划分前i个任务为j批的最小费用。

                 

,时间复杂度:,空间复杂度:

这显然是不够的。

实际上我们不一定要知道之前划分了多少批任务,只需要记录F[i]表示划分前i个任务的最小费用。

这样就写出了动态规划方程。

二、简单题2

将上题的n<=5000改为n<=300000。

Solution

这就是本文的重点所在了。

在上文中的动态规划中,尚有两种简单的优化思路:

  1. 优化状态:将这样一个动态规划转化为贪心或数学题。
  2. 优化转移:优化转移的时间(主要为优化重复或不必要的转移)。

显然,优化状态很难达成,那么我们考虑优化转移。

我们可以发现在转移的过程中有很多的不必要的转移:

考虑一下两个转移:

在此题中,若 

那么转移 j 就是不必要的。

也就是说,若有且选取转移状态的集合

并且存在,后面的转移比前面的优,则前面的转移就是无意义的,也就是对最终答案无贡献的了。

考虑本题,如何判断转移状态是否是有用的呢?

也就是说,如果 

那么后面的转移比前面的优,否则前面的转移比后面的优。

这样的,即是用斜率的形式,表现了转移之间的不必要的关系。

进一步,我们发现:

也就是说,如果当前存在后面的转移比前面的优,那么这个转移在之后的状态中都不会成为最有转移!

根据这个性质,我们选择用单调队列维护一个两点间斜率单调递增的点集队列。

设:

  1. 若有  ,则的转移必然不会是最优的,于是能够将它删除。(维护队尾)
  2. 若有,        则x1的转移必然不会是最优的,于是能够将它删除。 (维护队首)

最后的点集队列满足:在队首的点的转移必然是最优的。

于是

将转移化为动态规划完成。

三、简单题3

若   -512<=t[i]<=512 ,也就是说:

    不再成立怎么办呢?

我们发现:

  1. 若有  ,则的转移必然不会是最优的,于是能够将它删除。(维护队尾)

这一性质依然成立,那么这个点集集合还是会组成一个相邻点斜率递增的单调队列。

发现:

  1. 如果,那么优于
  2. 如果,那么优于

也就是说,答案一定存在于一个点,使得   且   

那么必然最优。

我们可以维护单调队列,只在队尾删除,每次二分查询一个最优点。

这样便是的斜率优化做法。

四、简单题4

一种形式斜率优化的形式:

队列中的点不满足单调性。

BZOJ1492: [NOI2007]货币兑换Cash

题目描述:详见BZOJ。

这一题就是典型的例子。

斜率不单调,那么就必须用cdq分治或splay维护斜率凸包解决斜率优化问题了。

下次有时间再补充。。。

斜率优化Convex Hull Trick相关推荐

  1. FZU-2239 Daxia Yayamao's problem(斜率优化)

    Daxia & Yayamao's problem FZU - 2239 题解:f(x)=A*x+B 如果j>k,Aj>Ak,Aj*x+Bj>=Ak*x+Bk,则(Bj-Bk ...

  2. BZOJ1597: [Usaco2008 Mar]土地购买(dp 斜率优化)

    题意 题目链接 Sol 重新看了一遍斜率优化,感觉又有了一些新的认识. 首先把土地按照\((w, h)\)排序,用单调栈处理出每个位置第向左第一个比他大的位置,显然这中间的元素是没用的 设\(f[i] ...

  3. BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )

    既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...

  4. 【BZOJ3963】[WF2011]MachineWorks cdq分治+斜率优化

    [BZOJ3963][WF2011]MachineWorks Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理,公司使用更加先 ...

  5. R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集)、ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull)

    R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集).ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull) 目录

  6. BZOJ 1492: [NOI2007]货币兑换Cash [CDQ分治 斜率优化DP]

    传送门 题意:不想写... 扔链接就跑 好吧我回来了 首先发现每次兑换一定是全部兑换,因为你兑换说明有利可图,是为了后面的某一天两种卷的汇率差别明显而兑换 那么一定拿全利啊,一定比多天的组合好 $f[ ...

  7. 实用线性代数和凸优化 Convex Optimization

    If not specified, the following conditions are assumed. X∈Rn∗mA∈Rm∗nX \in R^{n*m} \\ A \in R^{m*n} X ...

  8. uva 10256 The Great Divide (Convex Hull, Simple)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=14&page=sh ...

  9. 『玩具装箱TOY 斜率优化DP』

    玩具装箱TOY(HNOI2008) Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊 ...

最新文章

  1. Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等
  2. mongodb 查多个不等于_高可用架构之商城的mongodb设计分析
  3. js html模板生成图片不显示,网页中图片不显示问题
  4. 【详解】指令系统中跳转指令与OF,SF,CF,ZF的关系
  5. Orange Business Services 携手 Riverbed 将 SD-WAN 引入混合网络
  6. Amazon DynamoDB应用—为table指定Provisioned Throughput
  7. 路由器就能赚钱? 揭秘京东云无线宝背后的黑科技
  8. 10个常见的Android 新手误区
  9. 计算机主机的光驱怎么打开,笔记本电脑光驱怎么打开?高手教你打开笔记本光驱的方法...
  10. 生日快乐程序_「秒福」小程序:送祝福,2020我们不一样
  11. spring中使用Aspectj进行切面编程
  12. 产品原则和产品评审团
  13. win10计算机怎么连接网络,win10怎么设置宽带连接,教您修复宽带连接问题
  14. 1月书讯:Hello 2021! (下)
  15. kafka segment file 解析
  16. Spring的DI(依赖注入xml版)
  17. iCloud邮件客户端配置
  18. 华为开发者大会2021鸿蒙系统,鸿蒙2.0来了!华为开发者大会HDC 2020宣布
  19. DDoS攻击的原理是什么
  20. MQL4 判断double 数值近似值相等

热门文章

  1. 您的屁股发热严重,请降温后使用。
  2. 从网恋到失恋只需要一秒...
  3. MATLAB图像处理与数字信号处理资料分享来袭
  4. Prim 算法及其高效实现
  5. 从概念到案例:初学者须知的十大机器学习算法
  6. c++ 异步下获取线程执行结果_前端异步编程的那些事
  7. linux docker导入镜像,Docker镜像的导入和导出
  8. java程序编六角星_跨平台移动端解决方案—Weex
  9. linux phpunit 安装,PHPUnit安装教程
  10. java综合图形界面程序设计_java综合图形界面程序设计.doc