[BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
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
3
4
2
1
4
Sample Output
HINT
Source
Solution
设$f[i]$表示前$i$个物品装箱所需最小花费。
假设我们把$[j+1,i]$的物品装到一个箱子里,那么很容易得出dp方程:
$f[i]=min\{f[j]+(i-j+(\sum_{k=j+1}^{i}c[k])-L)^{2}\}$
现在要把这个$O(n^{2})$优化成$O(n)$:
设$d[i]=d[i-1]+c[i]+1$,$P=L+1$,那么
$f[i]=min\{f[j]+(d[i]-d[j]-P)^{2}\}$
假设k<j<i,且j比k优,则:
$f[j]+(d[i]-d[j]-P)^{2}<f[k]+(d[i]-d[k]-P)^{2}$
化简后的结果是:
$\frac{(f[j]+d[j]^{2})-(f[k]+d[k]^{2})}{d[j]-d[k]}<2*(d[i]-P)$
将$f[j]+d[j]^{2}$看成$y_{j}$,将$d[j]$看成$x_{j}$,就变成了斜率的表达式。
维护一个下凸壳($min$就是下凸壳,$max$就是上凸壳),找凸包上关于斜率$2*(d[i]-P)$的切点,该店就是决策点。
说右凸壳的都给我狗带!狗带!!!
由于满足决策单调性,所以决策$j$是单调不下降的,我们可以把多余的斜率删掉。
#include <bits/stdc++.h>
using namespace std;
long long f[], c[];
int q[]; double pow(long long x)
{
return 1.0 * x * x;
} double slope(int x)
{
return (f[q[x]] + pow(c[q[x]]) - f[q[x - ]] - pow(c[q[x - ]])) / (c[q[x]] - c[q[x - ]]);
} int main()
{
int n, l, front = , back;
cin >> n >> l;
for(int i = ; i <= n; ++i)
{
cin >> c[i];
c[i] += c[i - ] + ;
}
++l;
q[back = ] = ;
for(int i = ; i <= n; ++i)
{
while(front + < back && slope(front + ) <= * (c[i] - l))
++front;
int j = q[front + ];
f[i] = f[j] + (long long)pow(c[i] - c[j] - l);
q[++back] = i;
while(front + < back && slope(back - ) >= slope(back))
q[--back] = i;
}
cout << f[n] << endl;
return ;
}
[BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)的更多相关文章
- bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 11893 Solved: 5061[Submit][S ...
- bzoj1010: [HNOI2008]玩具装箱toy——斜率优化
方程 $\Large f(i)=min(f(j)+(s(i)-s(j)-1-L)^2)$ 其中$s(i)$为i的前缀和再加上$i$ 对于某个$i$若$j$比$k$优,则 $\large f(j)+(s ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- Bzoj 1010: [HNOI2008]玩具装箱toy(斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MB Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定 ...
- [bzoj1010][HNOI2008]玩具装箱toy_斜率优化dp
玩具装箱toy bzoj-1010 HNOI-2008 题目大意:P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一 ...
- 【bzoj1010】[HNOI2008]玩具装箱toy 斜率优化dp
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- [luogu3195 HNOI2008] 玩具装箱TOY (斜率优化dp)
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- P3195 [HNOI2008]玩具装箱TOY 斜率优化dp
传送门:https://www.luogu.org/problem/P3195 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任 ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP
题目:https://www.luogu.org/problemnew/show/P3195 第一次用斜率优化...其实还是有点云里雾里的: 网上的题解都很详细,我的理解就是通过把式子变形,假定一个最 ...
随机推荐
- nginx上支持.htaccess伪静态的配置实例
本文介绍下,在nginx上配置.htaccess伪静态的方法,有需要的朋友参考下吧. 在apache上.htaccess转向,只要apache编译的时候指明支持rewrite模块即可. 但是换到ngi ...
- 02-Nginx+MySQL+PHP7
[安装Nginx] #先安装如下包 yum install gcc gcc-c++ kernel-devel yum -y install pcre-devel openssl openssl-dev ...
- Django——ContentType及ContentType-signals的使用
一.ContentType 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的 ...
- JavaScript数据迭代方法差别
js有很多总接待方法,ES6之后又新增了几个: 这里主要讨论数组迭代遍历的方法所以不会细讲for...in... ES5.ES6数组迭代方法有: forEach map filter some eve ...
- 【学习笔记】 使用XML配置和注解实现Spring的依赖注入DI (2-3-2)
Spring的四个核心组件 1.beans Bean是包装应用程序自定义对象Object的 Object中保存数据 2.core 3.context 一个Bean的关系集合 4.expression ...
- Python基础——字符串
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 在Python中,字符串也是一种数据类型.相比其它数据类型,字符串算是比较复杂的.为何呢?因为字符串不仅包含英文字母 ...
- yaf框架加载全局公共函数
在Boostrap里面建一个方法(按规则命名的函数都会被自动执行) public function _initCommonFunctions(){ Yaf_Loader::import(Yaf_App ...
- Java数字签名——DSA算法
RSA数字加密算法参考:http://www.cnblogs.com/LexMoon/p/javaRSA.html DSS: 数字签名标准 DSA: 数字签名算法 DSA仅仅包含数字签名 —————— ...
- 如何遍历 Windows 摄像头设备?
#include <stdlib.h> #include <iostream> #include <Windows.h> #include <comdef.h ...
- Codeforces103D - Time to Raid Cowavans
Portal Description 给出长度为\(n(n\leq3\times10^5)\)的序列\(\{a_n\}\),进行\(q(q\leq3\times10^5)\)次询问:给出\(x,y\) ...