[HNOI2008]玩具装箱TOY

题目描述:

P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。

他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中。

P教授有编号为\(1......N\)的\(N\)件玩具,第\(i\)件玩具经过压缩后变成一维长度为\(C_{i}\).

为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的。

同时如果一个一维容器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物,

形式地说如果将第\(i\)件玩具到第\(j\)个玩具放到一个容器中,那么容器的长度将为 \(x= j - i + \sum_{k=i}^{j} C_{k}\)

制作容器的费用与容器的长度有关,根据教授研究,如果容器长度为\(x\),其制作费用为\((x - L) ^ {2}\).

其中\(L\)是一个常量。

P教授不关心容器的数目,他可以制作出任意长度的容器,甚至超过\(L\)。但他希望费用最小.

输入格式:

第一行输入两个整数\(N,L\).

接下来\(N\)行输入\(C_{i}\).

\(1<=N<=50000, 1<=L,C_{i}<=10^{7}\)

输出格式:

输出最小费用

不难想到,\(dp(i)\)表示把\(1......i\)号玩具装箱的最小费用。

那么有\(dp(i)=min(dp(j)+(\sum_{k=j}^{i} C_{k} + i - j - L - 1)^{2})\)

这个\(O(n^{2})\)的DP一定会超时,因此想办法优化。

决策单调性:

如果把决策点打出来,(用\(O(n^2)\)的DP来记录)

可以观察到满足决策单调性

而这个东西非常的套路。

维护一个\(tra\)指针,表示循环枚举的\(i\)从哪里转移,\(tra\)指针要及时更新

更新出\(dp(i)\)后,用\(dp(i)\)去决定\(i\)的决策区间在哪里

第一步:如果栈顶的决策点不如\(i\),把栈顶决策点退栈,重复直到不满足条件。

(注:细节:当决策点区间右端点比\(i\)还小时,同样要退出循环,并且此时\(i\)的右边全部是它的决策区间,不需要后面的二分了)

第二步:在当前栈顶决策区间中二分,二分出哪些区间的决策点应该更换为\(i\)

时间复杂度:\(O(n \log n)\)

不用化式子,只要打表就好了,这么好的算法,为什么不用用??

代码在此

斜率优化:

\(dp(i)=min(dp(j)+(\sum_{k=j}^{i} C_{k} + i - j - L - 1)^{2})\)

不妨设 \(pre(i)=\sum_{j=1}^{i} C_{j} +i\)

为了方便,默认\(L++\)

那么

\(dp(i)=dp(j)+(pre(i)-pre(j)-L)^{2}\)

\(dp(i)=dp(j)+pre(i)^{2}+pre(j)^{2}+L^{2}-2*pre(i)*pre(j)-2*pre(i)*L+2*pre(j)*L\)

\(dp(j)-pre(j)^{2}-2*pre(j)*L= -2*pre(i)*pre(j) - dp(i) - 2*pre(i)*L+pre(i)^{2}+L*L\)

那么现在就是一个形如\(y=kx+b\)的式子了

其中\( -2 * pre(i) \)为\( k \),单调递减

其中\(pre(j)\)为\( x \),单调递增

同时,要使\(dp(i)\)最小,就要使\(b\)最大

所以我们要维护一个上凸壳。

因为\(k,x\)同时单调递增,可以选择单调队列

复杂度:\(O(n)\)

代码在此

[HNOI2008]玩具装箱TOY --- DP + 斜率优化 / 决策单调性的更多相关文章

  1. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

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

  2. BZOJ.1010.[HNOI2008]玩具装箱toy(DP 斜率优化/单调队列 决策单调性)

    题目链接 斜率优化 不说了 网上很多 这的比较详细->Click Here or Here //1700kb 60ms #include<cstdio> #include<cc ...

  3. 1010: [HNOI2008]玩具装箱toy [dp][斜率优化]

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

  4. BZOJ1010: [HNOI2008]玩具装箱toy(dp+斜率优化)

    Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 12451  Solved: 5407[Submit][Status][Discuss] Descript ...

  5. P3195 [HNOI2008]玩具装箱TOY(斜率优化dp)

    P3195 [HNOI2008]玩具装箱TOY 设前缀和为$s[i]$ 那么显然可以得出方程 $f[i]=f[j]+(s[i]-s[j]+i-j-L-1)^{2}$ 换下顺序 $f[i]=f[j]+( ...

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

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

  7. 【BZOJ 1010】 [HNOI2008]玩具装箱toy (斜率优化)

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9330  Solved: 3739 Descriptio ...

  8. 1010: [HNOI2008]玩具装箱toy(斜率优化)

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 12280  Solved: 5277[Submit][S ...

  9. [HNOI2008]玩具装箱toy(斜率优化dp)

    前言 这是我写的第一道$dp$斜率优化的题目,$dp$一直都很菜,而且咖啡鸡都说了这是基础的东西,然而看别人对$dp$斜率优化一大堆公式又看不懂就老老实实做几道题目,这个比较实在 描述 给出$n$和$ ...

随机推荐

  1. 浅谈Stein算法求最大公约数(GCD)的原理及简单应用

    一.Stein算法过程及其简单证明 1.一般步骤: s1:当两数均为偶数时将其同时除以2至至少一数为奇数为止,记录除掉的所有公因数2的乘积k: s2:如果仍有一数为偶数,连续除以2直至该数为奇数为止: ...

  2. Feather包实现数据框快速读写,你值得拥有

    什么是Feather? Feature是一种文件格式,支持R语言和Python的交互式存储,速度更快.目前支持R语言的data.frame和Python pandas 的DataFrame. Feat ...

  3. 高性能优秀的服务框架-dubbo介绍

    先来了解一下这些年架构的变化,下面的故事是我编的.... "传统架构":很多年前,刚学完JavaWeb开发的我凭借一人之力就开发了一个网站,网站 所有的功能和应用都集中在一起,方便 ...

  4. tftp 开发板ping不通PC机

    开发板:JZ2440(天下2440开发板是一家) 当进入uboot界面时:输入命令print则显示: 将PC端的IP设置为192.168.1.11 在开发板上ping   192.168.1.11,若 ...

  5. Spring中的@Transactional事务注解

    事务注解方式 @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: @Transactional public class TestServiceBean impl ...

  6. html清屏 meta http-equiv="refresh" content="3">

    <meta http-equiv="refresh" content="3"> 什么意思? <meta http-equiv="re ...

  7. js获取系统时间

    //------------------------------------获取系统日期时间 var oDate=new Date(); //alert(oDate.getFullYear());// ...

  8. Android学习笔记(三) UI布局

    每一个布局都有其适合的方式,另外,这几个布局元素可以相互嵌套应用,做出美观的界面. 一.线性布局(LinearLayout) 线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下 ...

  9. appium---【Mac】Appium-Doctor提示WARN:“applesimutils cannot be found”解决方案

    报错提示“ applesimutils cannot be found”截图如下: 解决方案: brew tap wix/brew brew install applesimutils 再次执行app ...

  10. entityframework删除时提示“DELETE 语句与 REFERENCE 约束”的解决方法。

    1.加入List对象的Include var entity = db.XinDes.Include("Reviews").First(); db.XinDes.Remove(ent ...