题目传送门

这道题可以很快想到暴力DP的做法:

f[i]=min(f[i],f[j]+(C[i]-C[j]+i-j--L)^);

但是数据范围有50000,这就需要用斜率优化了。

我们设S[i]=C[i]+i(C[i]为前缀和),L++,设j为i的最优决策点。。

原方程就变为:

f[i]=f[j]+(S[i]-(S[j]-L))^;
f[i]=f[j]+S[i]^2+(S[j]-L)^2-2*S[i]*(S[j]-L);
f[j]+S[i]^2+(S[j]-L)^2=2*S[i]*(S[j]-L)+f[i];
y = k x + b

我们设2*S[i]为k。

相当于这题就变成了求最小的截距f[i]。

假设A,B,C,D为四个决策点。

因为AB的斜率小于f的斜率(2*S[i]),所以它对当前状态的转移一定是没用的。

因为如果要进过A点转移,需要将f"抬高"很多,会大大增大它的截距(f[i])。

所以斜率小于f(当前点)都可以排除。

所以B为最优决策点。

通过B点转移后,如图:

而对于这个New点,它对于之后的点,比D点更优,因为在之后转移时,CNew比CD的斜率更小,所得截距也最小。(由于f的斜率是单调递增的)

这个在凸包上的操作通过单调队列实现。

code:

#include <cstdio>
using namespace std; int read()
{
char c;while(c=getchar(),c<''||c>'');
int x=c-'';while(c=getchar(),c>=''&&c<='')x=x*+c-'';
return x;
} typedef long long LL;
LL N,L,f[],a[];
LL sum[],S[];
LL l[],h,t; double X(int x){return S[x];}
double Y(int y){return f[y]+(S[y]+L-)*(S[y]+L-);}
double get(int x,int y){
return (Y(y)-Y(x))/(X(y)-X(x));
} int main()
{
N=read(),L=read();L++;
register int i;
for(i=;i<=N;i++)a[i]=read();
for(i=;i<=N;i++){
sum[i]=sum[i-]+a[i];
S[i]=sum[i]+i;
}
h=t=;
for(i=;i<=N;i++){
while(h<t&&get(l[h],l[h+])<*S[i])h++;
f[i]=f[l[h]]+(S[i]-S[l[h]]-L)*(S[i]-S[l[h]]-L);
while(h<t&&get(l[t-],l[t])>get(l[t],i))t--;
l[++t]=i;
}
printf("%lld",f[N]);
return ;
}

BZOJ1010_玩具装箱toy_KEY的更多相关文章

  1. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

  2. 【BZOJ-1010】玩具装箱toy DP + 斜率优化

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8432  Solved: 3338[Submit][St ...

  3. C++之路进阶——codevs1319(玩具装箱)

    1319 玩具装箱  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description P教授要去看奥运,但是他舍不下他的玩具,于是 ...

  4. BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP

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

  5. 【BZOJ】【1010】【HNOI2008】玩具装箱Toy

    DP/斜率优化 根据题目描述很容易列出动规方程:$$ f[i]=min\{ f[j]+(s[i]-s[j]+i-j-1-L)^2 \}$$ 其中 $$s[i]=\sum_{k=1}^{i} c[k] ...

  6. 【bzoj1010】[HNOI2008]玩具装箱toy

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9281  Solved: 3719[Submit][St ...

  7. 【斜率DP】BZOJ 1010:玩具装箱

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7537  Solved: 2888[Submit][St ...

  8. BZOJ_1010_[HNOI2008]_玩具装箱toy_(斜率优化动态规划+单调队列)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1010 给出\(n\)和\(l\).有\(n\)个玩具,第\(i\)个玩具的长度是\(c[i]\ ...

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

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

随机推荐

  1. java多态-向上转型和向下转型

    向上转型:符合“is a”,是安全的,子类向上到父类,多余的属性和方法会丢弃 向下转型:不安全的,用instanceof提前判断一下,以免抛出异常 instanceof用法: result = obj ...

  2. 理解活在Iphone中的那些App (三)

    App的生存环境之宏观环境 从用户需求变成一个产品形体的App,是一个曲折的过程.主要的过程大概如此,分析用户需求,从用户需求中提炼出比较重要的部分,然后结合自己的创意,将其转化成产品.投放市场,接受 ...

  3. UVA 10617 Again Palindrome 区间DP

    题目链接: https://cn.vjudge.net/problem/UVA-10617 题目大意: 问有几种删除字符的方法可以使得该字符串为回文. 解题思路: 删除字符得到回文串的方法数 等于 字 ...

  4. Js 中的 this

    Js 中 this 的理解   this 是啥 ? this是 JavaScript 语言的一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用; 随着函数使用场合的不同,this ...

  5. 【Vue】安装(NPM 方法)

    [Vue2.0 新手完全填坑攻略——从环境搭建到发布]http://www.jianshu.com/p/5ba253651c3b 1.在用 Vue.js 构建大型应用时推荐使用 NPM 安装 2.Vu ...

  6. 使用iframe标签隐藏CSRF代码

    index.html <iframe src="1.html" width="0" height="0"></iframe ...

  7. 无网络环境下使用docker加载镜像

    无网络环境下使用docker加载镜像 你需要做的主要有3步骤:   先从一个有网络的电脑下载docker镜像 [root@localhost ~]# docker pull hub.c.163.com ...

  8. idea 注册码(2019)

    MTW881U3Z5-eyJsaWNlbnNlSWQiOiJNVFc4ODFVM1o1IiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lIjoiI ...

  9. Selenium自动化测试值环境搭建

    Selenium自动化测试之环境搭建 一.背景介绍 自动化测试近几年在测试领域很火,出去面试要是说不会自动化测试薪资都不好意思往高了要!很多公司做敏捷测试用到自动化,其他一些公司也是跟风,即使用不上自 ...

  10. C#简单实现LRU缓存

    最近跟同学吃饭扯淡的时候,由技术扯到薪资,又由薪资扯到他找工作时跟面试官是怎么扯淡拿高工资的,各种技术一顿侃,总之只要啥都了解就没问题了.谈到缓存的时候,我试探性的问了问- -你还记得LRU怎么写吗, ...