博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1096: [ZJOI2007]仓库建设(DP+斜率优化)
阅读量:5156 次
发布时间:2019-06-13

本文共 986 字,大约阅读时间需要 3 分钟。

#include<iostream>

#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
#define maxn 1000100
#define ll long long
#define dd double
int n;
ll x[maxn],p[maxn],c[maxn];
ll X[maxn],P[maxn],C[maxn],A[maxn];
ll f[maxn],yy[maxn];
int qu[maxn],he,bo;
ll a1[maxn],a2[maxn],a3[maxn];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld%lld%lld",&a1[i],&a2[i],&a3[i]);
}
for(int i=1;i<=n;i++){
x[i]=a1[n]-a1[n-i+1];
p[i]=a2[n-i+1];
c[i]=a3[n-i+1];
}
n++;
x[n]=x[n-1];
for(int i=1;i<=n;i++){
X[i]=x[i],P[i]=P[i-1]+p[i];
A[i]=A[i-1]+p[i]*X[i];
}
f[1]=c[1];
yy[1]=c[1]-A[1]+X[1]*P[1];
qu[he=bo=1]=1;
for(int i=2;i<=n;i++){
while(he>bo&&yy[qu[bo+1]]-yy[qu[bo]]<=(X[qu[bo+1]]-X[qu[bo]])*(P[i-1])){
bo++;
}
f[i]=yy[qu[bo]]+c[i]+A[i-1]-X[qu[bo]]*P[i-1];
yy[i]=f[i]-A[i]+X[i]*P[i];
while(he>bo&&(yy[qu[he]]-yy[qu[he-1]])*(X[i]-X[qu[he]])>=(yy[i]-yy[qu[he]])*(X[qu[he]]-X[qu[he-1]]))he--;
qu[++he]=i;
}
cout<<f[n];
}

转载于:https://www.cnblogs.com/wangyucheng/p/3623619.html

你可能感兴趣的文章
校门外的树2 contest 树状数组练习 T4
查看>>
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
Java SE之正则表达式一:概述
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>