bzoj1010: [HNOI2008]玩具装箱toy——斜率优化
2024-10-07 22:15:09
方程
$\Large f(i)=min(f(j)+(s(i)-s(j)-1-L)^2)$
其中$s(i)$为i的前缀和再加上$i$
对于某个$i$若$j$比$k$优,则
$\large f(j)+(s(i)-s(j)-L-1)^2<f(k)+(s(i)-s(k)-L-1)^2$
展开可以化简成$\large (f(j)-f(k)+s(j)^2-s(k)^2)/(2*(s(j)-s(k)))<=s(i)-L-1$
这样我们就可以用斜率优化了
设点$i$的坐标为$(f(i)+s(i)^2,2*s(i))$,维护一个下凸壳即可
代码
#include<cstdio>
#define maxn 50005
#define LL long long
int n,l,S,T,q[maxn];
LL f[maxn],s[maxn];
double calc(int a,int b){
return (f[a]-f[b]+s[a]*s[a]-s[b]*s[b])/(2.0*(s[a]-s[b]));
}
void insert(int x){
while(S<T-&&calc(x,q[T-])<=calc(q[T-],q[T-]))T--;
q[T++]=x;
}
int main(){
scanf("%d%d",&n,&l);l++;
for(int i=;i<=n;i++){
scanf("%d",s+i);
s[i]+=s[i-]+;
}
T++;
for(int i=;i<=n;i++){
while(S<T-&&calc(q[S+],q[S])<=s[i]-l)S++;
int x=q[S];
f[i]=f[x]+(s[i]-s[x]-l)*(s[i]-s[x]-l);
insert(i);
}
printf("%lld\n",f[n]);
return ;
}
最新文章
- 【WP 8.1开发】解决摄像头翻转问题(RuntimeApp篇)
- 自制jquery可编辑的下拉框
- android学习疑问汇兑
- 第三个Sprint冲刺第三天
- jQuery入门级part.1
- POJ1364 King
- PL/SQL设置编码方式
- Nginx+Keepalived实现高可用站点
- 关于google CDN 在中国访问不了的解决办法
- 如何使用git
- 恶补jquery(四)jquery中事件--冒泡
- Sizeof的三种作用
- 洛谷P3390【模板】矩阵快速幂——矩阵运算入门笔记
- git报错
- Maven学习笔记1(clean compile package install)
- Linux systemd limits
- 使用shape设置android控件只有部分边框有颜色
- dubbo环境搭建与tomcat集成、DEMO示例、常见问题(最完整版本、带管理控制台、监控中心、zookeeper)
- iOS开发-图片浏览器(优化)
- highcharts PHP中使用
热门文章
- NTT数论变换
- javascript 插件开发教程
- 笔试题-求小于等于N的数中有多少组素勾股数
- [转] .htaccess实现www 与没有www之间的重定向
- asp.net Core 使用redis(StackExchange.Redis)
- ubuntu安装更新命令
- 2019-8-31-C#-字典-Dictionary-的-TryGetValue-与先判断-ContainsKey-然后-Get-的性能对比
- XMLHTTPRequest状态status完整列表
- 解决VS2012新建MVC4等项目时,收到此模板加载程序集“NuGet.VisualStudio.Interop…”的错误
- opencv3.1.0 在控制台程序中报错:winnt.h(6464): error C2872: ACCESS_MASK: 不明确的