BZOJ1010_玩具装箱toy_KEY
这道题可以很快想到暴力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的更多相关文章
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- 【BZOJ-1010】玩具装箱toy DP + 斜率优化
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8432 Solved: 3338[Submit][St ...
- C++之路进阶——codevs1319(玩具装箱)
1319 玩具装箱 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description P教授要去看奥运,但是他舍不下他的玩具,于是 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- 【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] ...
- 【bzoj1010】[HNOI2008]玩具装箱toy
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9281 Solved: 3719[Submit][St ...
- 【斜率DP】BZOJ 1010:玩具装箱
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 7537 Solved: 2888[Submit][St ...
- BZOJ_1010_[HNOI2008]_玩具装箱toy_(斜率优化动态规划+单调队列)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1010 给出\(n\)和\(l\).有\(n\)个玩具,第\(i\)个玩具的长度是\(c[i]\ ...
- 【BZOJ 1010】 [HNOI2008]玩具装箱toy (斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9330 Solved: 3739 Descriptio ...
随机推荐
- Requests中文乱码解决方案
分析: r = requests.get(“http://www.baidu.com“) **r.text返回的是Unicode型的数据. 使用r.content返回的是bytes型的数据. 也就是说 ...
- 关于使用Filter降低Lucene tf idf打分计算的调研
将query改成filter,lucene中有个QueryWrapperFilter性能比较差,所以基本上都须要自己写filter.包含TermFilter,ExactPhraseFilter,Con ...
- 使用python编写svn钩子
同上一篇trac中安装插件的文章的出发点一样,感觉用文档和口头制定规则在执行上会有偏差并且需要经常引导新人去熟悉规则. 所以,又费了几个小时去琢磨怎么改进svn提交代码的钩子,现有的钩子的功能比较简单 ...
- Js 中的 this
Js 中 this 的理解 this 是啥 ? this是 JavaScript 语言的一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用; 随着函数使用场合的不同,this ...
- 【Vue】vue.js常用指令
http://www.cnblogs.com/rik28/p/6024425.html Vue.js的指令是以v-开头的,它们作用于HTML元素,指令提供了一些特殊的特性,将指令绑定在元素上时,指令会 ...
- leetcode 20 括号匹配
class Solution { public: bool isValid(string s) { stack<char> result; for(char c:s){ if(c == ' ...
- jquery mobile各类标签的refresh
JQM里面当我们更新了某些页面标签(如: listview, radiobuttons, checkboxes, select menus)里的数据时,必须做refresh操作. 为什么必须做refr ...
- I、Q信号是如何产生的,I、Q信号复用的作用
接收机在中频部分实现模数变换和采样,采样后的信号和数字域的同频相乘,就可以得到基带的I.Q分量.在无线接口传输时,每一种使用特定的载波频率.码(扩频码和扰码)以及载波相对相位(I或Q)的信道都可以理解 ...
- vim全选复制粘贴
感谢来源:http://blog.sina.com.cn/s/blog_6e70abbd0100zbk9.html ggVG #gg: 光标跳转到首行,在vim才有效,vi中无效 #V 是进入Visu ...
- Reading HPSRouter A High Performance Software Router
ICACT 2018 Background High speed traffic SDN NFV Hardware Advantages High performace Disadvantages C ...