[HNOI2008]玩具装箱
OJ题号:
BZOJ1010
思路:
斜率优化动态规划。
由题意得状态转移方程为$f_i=\displaystyle{\min_{j=0}^{i-1}}\{f_j+\left(i-j-1+\displaystyle{\sum_{k=j+1}^i}c_k-L\right)^2\}$。
用$a_i$表示$c_i$的前缀和,则原式为$f_i=\displaystyle{\min_{j=0}^{i-1}}\{f_j+\left(i-j-1+a_i-a_j-L\right)^2\}$。
考虑现在有两个状态$j$和$k$都可以转移到$i$。
假设$j$比$k$更优,则有:$f_j+\left(i-j-1+a_i-a_j-L\right)^2<f_k+\left(i-k-1+=a_i-a_k-L\right)^2$。
将与$i$有关的项提取出来,设$x=i-1+a_i-L$。
则原式变为$f_j+\left(x-j-a_j\right)^2<f_k+\left(x-k-a_k\right)^2$。
化简得$f_j+\left(j+a_j\right)^2-f_k-\left(k+a_k\right)^2<2x(j+a_j-k-a_k)$。
即$\frac{f_j+\left(j+a_j\right)^2-f_k-\left(k+a_k\right)^2}{(j+a_j-k-a_k)}<2x$。
对于状态$j<k<l$,若要使$k$为一个有用的状态,则有$\frac{f_k+(k+a_k)^2-f_j-(j+a_j)^2}{2(k+a_k-j-a_j)}<x\leq\frac{f_l+(l+a_l)^2-f_k-(k+a_k)^2}{2(l+a_l-k-a_k)}$。
然后我们可以维护一个单调队列,使队列中的相邻元素的斜率单调递增。
每当插入一个元素时,我们比较队列前端两个元素的斜率是否小于$x$,如果是,则将第一个元素弹出队列。
这时候队列前端的元素一定是最优的一个状态。
然后尝试将这个元素加入队列,为了保证队列中相邻元素之间的斜率单调递增,每次比较队列后端两个元素的斜率$x1$和队列最末端元素与当前元素$i$的斜率$x2$。
如果$x1>x2$,即新加入元素后不满足单调性,则将队列末端元素弹出。
由于每个元素最多只会进队一次,最后的时间复杂度是$O(n)$的。
#include<cstdio>
#include<cctype>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=;
int n,l,a[N]={},q[N]={},h=,t=;
long long f[N]={};
inline long long sqr(const long long x) {
return x*x;
}
inline double slope(const int &j,const int &k) {
return double(f[j]+sqr(j+a[j])-f[k]-sqr(k+a[k]))/double(j+a[j]-k-a[k]);
}
inline bool check(const int &i,const int &j,const int &k) {
return slope(k,j)>*(i+a[i]-l-);
}
inline bool check2(const int &i,const int &j,const int &k) {
return slope(j,i)<slope(k,j);
}
int main() {
n=getint(),l=getint();
for(register int i=;i<=n;i++) {
a[i]=a[i-]+getint();
while(h<t&&!check(i,q[h],q[h+])) h++;
const int &j=q[h];
f[i]=f[j]+sqr(i-j-+a[i]-a[j]-l);
while(h<t&&!check2(q[t-],q[t],i)) t--;
q[++t]=i;
}
printf("%lld\n",f[n]);
return ;
}
[HNOI2008]玩具装箱的更多相关文章
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- 【bzoj1010】[HNOI2008]玩具装箱toy
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9281 Solved: 3719[Submit][St ...
- 【BZOJ 1010】 [HNOI2008]玩具装箱toy (斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9330 Solved: 3739 Descriptio ...
- bzoj 1010 [HNOI2008]玩具装箱toy(DP的斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 7874 Solved: 3047[Submit][St ...
- BZOJ 1010 [HNOI2008]玩具装箱toy
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 7184 Solved: 2724[Submit][St ...
- bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 11893 Solved: 5061[Submit][S ...
- P3195 [HNOI2008]玩具装箱TOY(斜率优化dp)
P3195 [HNOI2008]玩具装箱TOY 设前缀和为$s[i]$ 那么显然可以得出方程 $f[i]=f[j]+(s[i]-s[j]+i-j-L-1)^{2}$ 换下顺序 $f[i]=f[j]+( ...
- [luogu P3195] [HNOI2008]玩具装箱TOY
[luogu P3195] [HNOI2008]玩具装箱TOY 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆, ...
- cogs 1330 [HNOI2008]玩具装箱toy
cogs 1330 [HNOI2008]玩具装箱toy 瞎扯,急忙AC的请跳过 感觉数据结构写的太多了有点晕=+ 发现还没学斜率优化+- 于是来学一学QwQ 上次这题打了个决策优化直接水过了..理论O ...
随机推荐
- container_of分析【转】
转自:http://blog.csdn.net/tigerjibo/article/details/8299589 1.container_of宏 1> Container_of在Linux内核 ...
- shell监控网站是否自动运行并自动重启【原创】
shell监控网站是否自动运行并自动重启 #!/bin/bash -T www.baidu.com ];then echo "`date` 网站访问正常!" >> /r ...
- MySQL分布式集群之MyCAT(一)简介【转】
隔了好久,才想起来更新博客,最近倒腾的数据库从Oracle换成了MySQL,研究了一段时间,感觉社区版的MySQL在各个方面都逊色于Oracle,Oracle真的好方便!好了,不废话,这次准备记录一些 ...
- SSD的SLC MLC 和TLC哪个好?
<1>SLC = Single-Level Cell ,即1bit/cell,速度快寿命长,价格超贵(约MLC 3倍以上的价格),约10万次擦写寿命MLC = Multi-Level Ce ...
- vue总结 03过滤器
过滤器 Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应该被添加在 JavaS ...
- 基于vue配置axios
转载地址:https://juejin.im/post/5a02a898f265da43052e0c85 1.背景 在项目开发中ajax请求是必不可缺少 一部分ajax请求不需要loading或则请求 ...
- jmeter之数据库
https://www.cnblogs.com/ShadowXie/p/6007515.html
- 16/11/22_plsql
1.数据类型: char 固定长度,varchar 字符长度按照实际长度, varchar2 字符均存储2个字节, nvarchar 按照Unicode存储.number(m,n)总长度m,小数 n. ...
- (二)HtmlUnit 使用
第一节: htmlunit 模拟浏览器请求 第二节: htmlunit 获取指定元素 第三节: htmlunit 使用代理 IP 第四节: htmlunit 取消 css,javascript 支持 ...
- 教您如何进行SQL跨表更新
SQL跨表更新数据是在使用SQL数据库中比较常用的,下面就将为您详细介绍SQL跨表更新数据的步骤,希望对您学习SQL跨表更新数据有所启迪. 原始数据如下,首先是表结构 A_dept的初始数据 A_em ...