BZOJ 1010 玩具装箱toy(斜率优化DP)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1010
题目大意: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。但他希望费用最小。
解题思路:我们可以很容易得到O(n^2)的状态转移方程:dp[i]=min{dp[j]+(sum[i]-sum[j]+i-j-1-l)^2}。显然这种写法会超时, 根据状态转移方程的性质,我们可以利用斜率优化,利用队列维护单调性,使得复杂度降为O(n)。
假设存在k<j<i,且j比k优,于是可以写出不等式dp[j]+(sum[i]-sum[j]+i-j-1-l)^2<=dp[k]+(sum[i]-sum[j]+i-j-1-l)^2
设s[j]=sum[j]+j,s[k]=sum[k]+k,C=l+1.
则原式可化为:dp[j]+(s[i]-s[j]-C)^2<=dp[k]+(s[i]-s[k]-C)^2
dp[j]+(s[j]+C)^2-2*s[i]*(s[j]+C)<=dp[k]+(s[k]+C)^2-2*s[i]*(s[k]+C)
(dp[j]+(s[j]+C)^2-dp[k]-(s[k]+C)^2)/(2*s[j]-2*s[k])<=s[i]
设yj=dp[j]+(s[j]+C)^2,yk=dp[k]+(s[k]+C)^2,xj=2*s[j],xk=2*s[k]
令g(k,j)=yj-yk/xj-xk.
当①g(k,j)<=s[i],j比k优,k可抛弃。
②如果g(k,j)>=g(j,i),那么j点便永远不可能成为最优解,可以直接将它踢出我们的最优解集。
1)若g(j,i)<=s[i],那么就是说i点要比j点优,排除j点。
2)如果g(j,i)>s[i],那么j点此时是比i点要更优,但是同时g(k,j)>=g(i,j)>s[i]。这说明还有k点会比j点更优,同样排除j点。
本质:维护一个斜率单调的队列。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=5e4+; LL l,C;
LL sum[N],dp[N],q[N]; //yj-yk/xj-xk
double Slope(int k,int j){
return double(dp[j]+(sum[j]+C)*(sum[j]+C)-dp[k]-(sum[k]+C)*(sum[k]+C))/(*sum[j]-*sum[k]);
} //dp[i]=min{dp[j]+(sum[i]-sum[j]+i-j-1-l)^2}
LL getDP(int i,int j){
return dp[j]+(sum[i]-sum[j]-C)*(sum[i]-sum[j]-C);
} int main(){
int n;
scanf("%d%lld",&n,&l);
C=l+;
for(int i=;i<=n;i++){
scanf("%lld",&sum[i]);
sum[i]+=sum[i-];
}
for(int i=;i<=n;i++){
sum[i]+=i;
}
dp[]=;
int head=,tail=;
q[tail++]=;
for(int i=;i<=n;i++){
while(head+<tail&&Slope(q[head],q[head+])<=sum[i]){
head++;
}
dp[i]=getDP(i,q[head]);
while(head+<tail&&Slope(q[tail-],i)<=Slope(q[tail-],q[tail-])){
tail--;
}
q[tail++]=i;
}
printf("%lld\n",dp[n]);
return ;
}
BZOJ 1010 玩具装箱toy(斜率优化DP)的更多相关文章
- BZOJ 1010: 玩具装箱toy (斜率优化dp)
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
- bzoj 1010 玩具装箱toy -斜率优化
P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具,第i件玩具 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 11893 Solved: 5061[Submit][S ...
- 『玩具装箱TOY 斜率优化DP』
玩具装箱TOY(HNOI2008) Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊 ...
- 【bzoj1010】[HNOI2008]玩具装箱toy 斜率优化dp
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- 【BZOJ1010】【HNOI2008】玩具装箱toy (斜率优化DP) 解题报告
题目: 题目在这里 思路与做法: 这题不难想. 首先我们先推出一个普通的dp方程: \(f_i = min \{ f_j+(i-j-1+sum_i-sum_j-L)^2\}\) 然后就推一推式子了: ...
- P3195 [HNOI2008]玩具装箱TOY 斜率优化dp
传送门:https://www.luogu.org/problem/P3195 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任 ...
- [luogu3195 HNOI2008] 玩具装箱TOY (斜率优化dp)
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP
题目:https://www.luogu.org/problemnew/show/P3195 第一次用斜率优化...其实还是有点云里雾里的: 网上的题解都很详细,我的理解就是通过把式子变形,假定一个最 ...
随机推荐
- 洛谷 P3332 [ZJOI2013]K大数查询 解题报告
P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...
- 20165218 2017-2018-1 《Java程序设计》第三周学习总结
20165218 2017-2018-1 <Java程序设计>第三周学习总结 教材学习内容总结-第四章 类与对象 面向对象语言 需要完成某种任务时,首先要想到,谁去完成任务,即哪个对象去完 ...
- derby数据库windows自带的客户端
本示例演示用windows自带的ij来操作derby数据库,包括建库,建表,插入数据,查询数据 首先要配置环境变量: 其次打开cmd输入如下图所示的命令: java代码如下: package com. ...
- bzoj [POI2007]旅游景点atr 状态压缩+Dij
[POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 2258 Solved: 595[Submit][Status][D ...
- C++ 什么是多态
一.什么是多态(Polymorphism) 多态(Polymorphism)是面向对象(Object-Oriented,OO)思想"三大特征"之一,其余两个分别是封装(Encaps ...
- RotateAnimation 详解
RotateAnimation 详解 看看新闻网>看引擎>开源产品 其他构造器的旋转也可参考这副图. RotateAnimation旋转坐标系为以旋转点为坐标系(0,0)点.x轴为0度,顺 ...
- window10下的solr6.1.0入门笔记之---安装部署
1.安装部署java1.6+ ,确保jre安装[安装步骤略] 安装后的环境为jdk1.8+ jre1.8+ 2.安装ant 下载:官网=>http://ant.apache.org/=> ...
- [POI2008]BLO-Blockade
https://www.luogu.org/problem/show?pid=3469 题目描述 There are exactly towns in Byteotia. Some towns ar ...
- 「6月雅礼集训 2017 Day5」学外语
[题目大意] 给出$\{P_i\}$,求经过以下操作后能够得到的不同序列个数: 第一步,选择$i, j$,交换$P_i,P_j$:第二步,把所有$P_x=i$的$P_x$变为$j$,把所有$P_x=j ...
- Bzoj1822 [JSOI2010]Frozen Nova 冷冻波
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1933 Solved: 608 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖 ...