1010: [HNOI2008]玩具装箱toy

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 10707  Solved: 4445
[Submit][Status][Discuss]

Description

  P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压
缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中。P教授有编号为1...N的N件玩具,第i件玩具经过
压缩后变成一维长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的。同时如果一个一维容
器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物,形式地说如果将第i件玩具到第j个玩具放到一
个容器中,那么容器的长度将为 x=j-i+Sigma(Ck) i<=K<=j 制作容器的费用与容器的长度有关,根据教授研究,
如果容器长度为x,其制作费用为(X-L)^2.其中L是一个常量。P教授不关心容器的数目,他可以制作出任意长度的容
器,甚至超过L。但他希望费用最小.

Input

  第一行输入两个整数N,L.接下来N行输入Ci.1<=N<=50000,1<=L,Ci<=10^7

Output

  输出最小费用

Sample Input

5 4
3
4
2
1
4

Sample Output

1
 
 
 
线性的DP关系式为 dp[i]=min{dp[i],dp[j]+(sum[i]-sum[j]+i-j-1-L)^2}
显然超时,考虑优化。
假设i选择时有k优于j(k>j 之所以选k大于j的原因是从前往后扫,考虑后面优于前面是否可以舍弃前面的);
1:首先证明满足单调性(换句话说就是对一个当前的i来说,如果k优于j,那么i之后k都优于j)
有dp[k]+(sum[i]-sum[k]+i-k-1-L)^2<dp[j]+(sum[i]-sum[j]+i-j-1-L)^2;(不妨令f[i]=sum[i]+i,C=1+L)
则有dp[k]+(f[i]-f[k]-C)^2<dp[j]+(f[i]-f[j]-C)^2
要证对于任意t>i 均有dp[k]+(f[t]-f[k]-C)^2<dp[j]+(f[i]-f[j]-C)^2  (令f[t]=f[i]+v,嗯经过一系列运算可以知道这个可以证明)
2:利用这个结论
若是利用这个结论条件肯定得先满足吧 所以有dp[k]+(f[i]-f[k]-C)^2<dp[j]+(f[i]-f[j]-C)^2
==》》 (dp[k]+(f[k]+c)^2-dp[j]-(f[j]+c)^2)/2*(f[k]-f[j])<=f[i]   (1)
即在从前向后扫描的过程中 只要满足(1)式,就可以去掉队首,若去不掉就将队首作为中介进行运算(这是第一个while所在)
其次,若是将一个元素添加到队列中,必须要将其和原倒数第一个进行比较,若其优于倒数第一个,则将其替换掉(第二个while),这个的意义所在是防止出现 中优,次优,最优这种队列排序,如果没有while的话,计算时只能选取一个中优的而不是最优的(这个是第一个while不能去掉的)具体代码实现请移步http://hzwer.com/2114.html

最新文章

  1. C程序运行计时
  2. 7.Java中的字符串
  3. Webwork 学习之路【07】文件上传下载
  4. 简单说说Tk和Tcl
  5. Python自动化之线程进阶篇(二)
  6. attr和prop
  7. Android 数据通信
  8. 这个算asp.net的一个bug吗?
  9. python部分模块的安装
  10. 借助HTML分别禁用IE8, IE9的兼容视图模式的小技巧
  11. Java日期格式化
  12. Struts2 常用的常量配置
  13. 如何将 select top 4 id from table1 赋值 给 declare @id1 int,@id2 int,@id3 int,@id4 int
  14. Android 再按一次退出程序
  15. file控件change事件触发问题
  16. JS实现等比例缩放图片
  17. ES 08 - 创建、查看、修改、删除、关闭Elasticsearch的index
  18. vscode 打开多个标签页
  19. Android Studio旧版(内含SDK)安装和环境变量配置 转自I-T枭
  20. mycat 安装 分表 分库 读写分离

热门文章

  1. 后缀数组SA
  2. 快速上手最新的 Vue CLI 3
  3. spring-boot下mybatis的配置
  4. MongoDB学习(三)
  5. 有关for循环的一些东西
  6. CF1316C Primitive Primes
  7. C# 基础知识系列- 14 IO篇 流的使用
  8. Fibonacci相关问题
  9. 【面试题】String类、包装类的不可变性
  10. Circle of Monsters(贪心)