玩具装箱

【问题描述】

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。但他希望费用最小.

【输入格式】

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

【输出格式】

输出最小费用

【样例输入】

5 4

3

4
2
1
4

【样例输出】

1


题解:

设f[i]为选完前i个最小的费用

那么转移方程:

发现具有决策单调性

那么······

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#define big long long
using namespace std;
struct Ti
{
int x, y, z;
}o[];
int n, m;
big s;
big sum[], f[];
big sqr(big x)
{
return x * x;
}
big Cal(big x, big y)
{
return f[x] + sqr(sum[y] - sum[x] + y - x - - m);
}
int Two(int x, int y, int z, int ss)
{
int l = x, r = y, mi;
while(l <= r)
{
mi = (l + r) >> ;
if(Cal(ss, mi) < Cal(z, mi)) r = mi - ;
else l = mi + ;
}
return l;
}
int main()
{
scanf("%d%d", &n , &m);
for(int i = ; i <= n; ++i)
{
scanf("%lld", &s);
sum[i] = sum[i - ] + s;
}
int t = , w = , cc;
o[] = (Ti) {, n, };
for(int i = ; i <= n; ++i)
{
if(i > o[t].y) ++t;
f[i] = Cal(o[t].z, i);
if(Cal(i, n) < Cal(o[w].z, n))
{
while(t <= w && Cal(i, o[w].x) < Cal(o[w].z, o[w].x)) --w;
if(t <= w)
{
cc = Two(o[w].x, o[w].y, o[w].z, i);
o[w].y = cc - ;
o[++w] = (Ti) {cc, n, i};
}
else o[++w] = (Ti) {i, n, i};
}
}
printf("%lld", f[n]);
}

最新文章

  1. Python Day17
  2. mac下卸载MySQL
  3. 【编程题目】输出 1 到最大的 N 位数
  4. OpenBSD为何还在用CVS之感
  5. (zz) 谷歌技术&quot;三宝&quot;之BigTable
  6. Hadoop学习14--Hadoop之一点点理解yarn
  7. Yii中配置单点登录 即多个子站同步登录
  8. 2013年7月份第3周51Aspx源码发布详情
  9. 【转】asp.net Cookie值中文乱码问题解决方法
  10. Oracle监控代理安装ITM(IBM Tivoli Monitoring)
  11. 106、抗锯齿方法paint.setAntiAlias(ture);paint.setFilterBitmap(true))
  12. 求助:对话框下OnInitDialog中使用SetTimer无效
  13. Android Studio实现Service AIDL
  14. 读取XML文件内容
  15. wget用法汇总
  16. Scoop Windows 的命令行安装程序管理工具
  17. (转)web.xml中的contextConfigLocation在spring中的作用
  18. 一起来给iOS 11找bug: 苹果还是乔布斯时代的细节控吗?
  19. kibana 的search 的的搜索提示挡住输入框
  20. win8设置开机启动项

热门文章

  1. C++类构造函数、析构函数运行机理
  2. glob - 形成路径名称
  3. websphere7.0异常:SRVE0255E: 尚未定义要处理 /wcm 的 Web 组/虚拟主机
  4. shell脚本,实现奇数行等于偶数行。
  5. (56)zabbix Screens视图配置
  6. 如何把握好 transition 和 animation 的时序,创作描边按钮特效
  7. CSS3-盒模型-resize属性
  8. axure笔记--内部框架交互链接
  9. PHP方法之 mb_substr
  10. 《嵌入式linux应用程序开发标准教程》笔记——9.多线程编程