1010: [HNOI2008]玩具装箱toy

Time Limit: 1 Sec Memory Limit: 162 MB

Submit: 12665 Solved: 5540

[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[i]=min(dp[j]+(sum[i]+i-sum[j]-j-l-1)^2)(j < i)
但这样时间复杂度为O(n^2) n=50000会炸飞。
所以我们考虑斜率优化。
首先令A(i)=sum[i]+i。
B(i)=A(i)+l+1。
所以我们的转移方程可化简为:
dp[i]=dp[j]+(A(i)-B(j))^2;
所以dp[i]=dp[j]+A(i)^2-2*A(i)*B(i)+B(i)^2;
观察式子,A(i)^2只与i有关,所以先不做考虑。
再设X(i)=B(i),Y(i)=B(i)^2+dp[i];
继续化简得:
dp[i]=Y(j)-2*X(i)*A(i)+A(i)^2;
移项得
Y(j)=(dp[i]+2*X(i)*A(i)-A(i)^2;
发现上式形容y=kx+b。2*A(i)为斜率,而A(i)又是单调递增的,所以斜率单调递增,所以我们只需要维护
一个凸包,用单调队列。 首先先根据当前斜率判断队头是否合法,若不合法则弹出队头。
然后用队头更新dp[i]。
最后再让当前元素入队,维护凸包的性质,弹队尾。 时间复杂度O(n)。

代码

#include<bits/stdc++.h>
#define int long long using namespace std;
const int MAXN = 500005; int n,l;
int dp[MAXN],sum[MAXN];
int head=1,tail=1,q[MAXN]; inline double A(int i){return sum[i]+i;}
inline double B(int i){return A(i)+l+1;}
inline double Y(int i){return dp[i]+B(i)*B(i);}
inline double X(int i){return B(i);}
inline double sp(int i,int j){return 1.0*(Y(j)-Y(i))/(X(j)-X(i));} signed main() {
ios::sync_with_stdio(false);
cin>>n>>l;
for(register int i=1; i<=n; i++) {
int x;
cin>>x;
sum[i]=sum[i-1]+x;
}
for(register int i=1; i<=n; i++){
while(head<tail and 2*A(i)>sp(q[head],q[head+1])) head++;
dp[i]=dp[q[head]]+(A(i)-B(q[head]))*(A(i)-B(q[head]));
while(head<tail and sp(i,q[tail-1])<sp(q[tail-1],q[tail])) tail--;
q[++tail]=i;
}
cout<<dp[n]<<endl;
return 0;
}

BZOJ 1010 (HNOI 2008) 玩具装箱的更多相关文章

  1. [bzoj 1010][HNOI 2008]玩具装箱

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

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

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

  3. BZOJ 1010: [HNOI2008]玩具装箱toy(DP+斜率优化)

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

  4. BZOJ 1010 [HNOI2008]toy 玩具装箱

    2017.6.9:经过我的不懈努力,终于把此题A掉了,但上凸和下凸总是那么让人费解…… P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意 ...

  5. 【BZOJ 1010】 [HNOI2008]玩具装箱toy

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

  6. [HNOI 2008]玩具装箱

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

  7. 解题:HNOI 2008 玩具装箱

    题面 搞了一晚上斜率优化,大概懂了一点,写写 原来常用的优化dp方法:做前缀和,预处理,数据结构维护 现在有转移方程长这样的一类dp:$dp[i]=min(dp[i],k[i]*x[j]+y[j]+c ...

  8. [bzoj 1004][HNOI 2008]Cards(Burnside引理+DP)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1004 分析: 1.确定方向:肯定是组合数学问题,不是Polya就是Burnside,然后题目上 ...

  9. BZOJ 1009 HNOI 2008 GT考试 递推+矩乘

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3679  Solved: 2254[Submit][Statu ...

  10. [bzoj 1005][HNOI 2008]明明的烦恼(prufer数列+排列组合)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1005 分析: 首先prufer数列:http://baike.baidu.com/view/1 ...

随机推荐

  1. 笔记43 Spring Web Flow——订购披萨应用详解

    一.项目的目录结构 二.订购流程总体设计 三.订购流程的详细设计 1.定义基本流程pizza-flow.xml <?xml version="1.0" encoding=&q ...

  2. HTTP状态码及请求头

    状态码 状态码告知从服务器端返回的请求结果 一般可分为5个大类 1XX Informational(信息性状态码) 2XX Success(成功状态码) 3XX Redirection(重定向状态码) ...

  3. bootstrapValidator--表单校验

    关于表单校验 要依次引入 <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css"& ...

  4. iOS报错锦集

    1.Your session has expired. Please log in. 提示“Your session has expired. Please log in.” 解决办法: Xcode ...

  5. 使用反射机制,获取 ArrayList 的容量大小

    本文所有说明及代码示例都是基于JDK 1.8  ArrayList 提供size()方法获取当前集合的元素数量,但无法知道当前集合的容量,翻看 ArrayList 的源代码,可以看到字段 elemen ...

  6. 46张PPT弄懂JVM、GC算法和性能调优!

    来源:cnblogs.com/cyfonly/p/5807121.html 本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述. ...

  7. 活动:月末送Java技术书福利|抽奖

    本公众号运营了快一年了 原创干货超过200+ 收获了也快1W粉丝 这么多粉丝-- 送书活动怎能少? 虽然这次我们是有备而来 但是-- 所有书籍为作者自掏腰包 所以本次送书数量有限 不能满足到所有人 重 ...

  8. Xtrabackup 热备

    Xtrabackup介绍Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁):m ...

  9. JDBC_数据库连接池DRUID

    /** * @Description: TODO(这里用一句话描述这个类的作用) * @Author aikang * @Date 2019/8/26 20:12 */ /* 1.数据库连接池: 1. ...

  10. 【第五周读书笔记】我是一只IT小小鸟

    读了第一个同学的自述,我印象最深的就是一些高分同学,只是机械性地背诵知识点,然后不停刷题,只是为了拿一个高分,然而他们对学科的一些基本概念都没有掌握牢靠.高分,并不代表学的就好.学得好不仅仅要牢靠掌握 ...