L公司有N个工厂,由高到底分布在一座山上。

工厂1在山顶,工厂N在山脚。 由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用。

突然有一天,L公司的总裁L先生接到气象部门的电话,被告知三天之后将有一场暴雨,于是L先生决定紧急在某些工厂建立一些仓库以免产品被淋坏。

由于地形的不同,在不同工厂建立仓库的费用可能是不同的。第i个工厂目前已有成品Pi件,在第i个工厂位置建立仓库的费用是Ci。

对于没有建立仓库的工厂,其产品应被运往其他的仓库进行储藏,而由于L公司产品的对外销售处设置在山脚的工厂N,故产品只能往山下运(即只能运往编号更大的工厂的仓库),当然运送产品也是需要费用的,假设一件产品运送1个单位距离的费用是1。

假设建立的仓库容量都都是足够大的,可以容下所有的产品。你将得到以下数据:

  • 工厂i距离工厂1的距离Xi(其中X1=0);
  • 工厂i目前已有成品数量Pi;
  • 在工厂i建立仓库的费用Ci;

请你帮助L公司寻找一个仓库建设的方案,使得总的费用(建造费用+运输费用)最小。

Solution

有一个非常好的东西,就是只能运送到到比自身编号大的点,这样我们就可以列出dp方程。

dp[i]=max(dp[j]+x[i]*(sum[i]-sum[j])+sump[i]-sump[j]+c[i])

这里sum[i]指p[i]的前缀和,sump[i]指x[i]*p[i]的前缀和。

这样是n^2的,考虑如何优化。

按照惯例,我们把含i的式子和含j的式子分开来看。

dp[i]=dp[j]+x[i]*sum[i]-x[i]*sum[j]+sump[i]-sump[j]+c[i];

令a[i]=x[i]*sum[i]-sump[i]-dp[i]  . b[i]=dp[i]+sump[i];

dp式子就变成了x[i]*sum[j]-a[i]=b[i]

为了求最小值,我们就维护一个下凸包。

观察到x[i]和sum[i]都是单调递增的,用单调队列就可以了。

Code

#include<iostream>
#include<cstdio>
#define Y(i) (dp[i]+sup[i])
#define X(i) (sum[i])
#define N 1000002
using namespace std;
long long x[N],y[N],p[N],c[N],sum[N],dp[N],sup[N],n,h,t,q[N];
inline int rd(){
int x=;char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c)){
x=(x<<)+(x<<)+(c^);
c=getchar();
}
return x;
}
inline double calc(int i,int j){
return 1.0*((double)Y(j)-Y(i))/(double)(X(j)-X(i));
}
int main(){
n=rd();
for(int i=;i<=n;++i)x[i]=rd(),p[i]=rd(),c[i]=rd(),sum[i]=sum[i-]+p[i],sup[i]=sup[i-]+p[i]*x[i];
for(int i=;i<=n;++i){
while(h<t&&calc(q[h],q[h+])<x[i])h++;
dp[i]=dp[q[h]]+x[i]*(sum[i]-sum[q[h]])-sup[i]+sup[q[h]]+c[i];
while(h<t&&calc(q[t-],q[t])>calc(q[t],i))t--;
q[++t]=i;
}
cout<<dp[n];
return ;
}

[ZJOI2007]仓库建设(斜率优化)的更多相关文章

  1. bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)

    题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...

  2. BZOJ 1096: [ZJOI2007]仓库建设 [斜率优化DP]

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4201  Solved: 1851[Submit][Stat ...

  3. 【BZOJ1096】[ZJOI2007]仓库建设 斜率优化

    [BZOJ1096][ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司 ...

  4. bzoj1096[ZJOI2007]仓库建设 斜率优化dp

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5482  Solved: 2448[Submit][Stat ...

  5. 【bzoj1096】[ZJOI2007]仓库建设 斜率优化dp

    题目描述 L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天,L公司的总裁L ...

  6. P2120 [ZJOI2007]仓库建设 斜率优化dp

    好题,这题是我理解的第一道斜率优化dp,自然要写一发题解.首先我们要写出普通的表达式,然后先用前缀和优化.然后呢?我们观察发现,x[i]是递增,而我们发现的斜率也是需要是递增的,然后就维护一个单调递增 ...

  7. [BZOJ1096] [ZJOI2007] 仓库建设 (斜率优化)

    Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天, ...

  8. 洛谷P2120 [ZJOI2007]仓库建设 斜率优化DP

    做的第一道斜率优化\(DP\)QwQ 原题链接1/原题链接2 首先考虑\(O(n^2)\)的做法:设\(f[i]\)表示在\(i\)处建仓库的最小费用,则有转移方程: \(f[i]=min\{f[j] ...

  9. [ZJOI2007] 仓库建设 - 斜率优化dp

    大脑真是个很优秀的器官,做事情之前总会想着这太难,真的逼着自己做下去,回头看看,其实也不过如此 很朴素的斜率优化dp了 首先要读懂题目(我的理解能力好BUG啊) 然后设\(dp[i]\)表示处理完前\ ...

随机推荐

  1. centos 检测aufs 并安装

    http://www.cnblogs.com/logo-fox/p/7366506.html 因为DeviceMapper不稳定,所以必须升级到3.10以上的内核,运行docker(2.6提示运行do ...

  2. React-Native之截图组件view-shot的介绍与使用

    React-Native之截图组件view-shot的介绍与使用 一,需求分析 1,需要将分享页生成图片,并分享到微信好友与朋友圈. 二,react-native-view-shot介绍 1,可以截取 ...

  3. spring boot中log4j冲突问题和解决办法

    Spring Boot中自带了log4j日志管理.写法应该是: private static final Logger logger = Logger.getLogger(XXX.class); 而不 ...

  4. [2018.05].NET Core 3 and Support for Windows Desktop Applications

    .NET Core 3 and Support for Windows Desktop Applications Richard 微软官网的内容...net 3.0 升级任务 任重道远 https:/ ...

  5. java语句中的重定向函数

    重定向后面就不能转发了,所以return null

  6. Linux安装jdk环境

    前言: 又重新起了一个CentOS7,里面什么都没有,翻出以前CentOS7安装jdk的笔记,现在已经弃用有道云了,用博客比较多,所以把它移过来. 有道云笔记地址(CentOS7安装1.8jdk):h ...

  7. 4.请介绍一下c++和Java的区别

    1.指针 2.c++多重继承,Java只能继承一个父类,但是可以继承多个接口 3.数据类型及类,Java完全面向对象,所有函数和变量都必须是类的一部分.而c++允许将函数和变量定义为全局,Java取消 ...

  8. Hbase获取流程

    1\\.客户端chou操作 2.服务器dauncaozuo操作 3\存储优化

  9. Linux基础学习(12)--Linux服务管理

    第十二章——Linux服务管理 一.服务简介与分类 1.服务的分类: 注:独立的服务放在内存中(好处:响应的速率快,坏处:独立的服务越多,耗费的内存资源越多):xinetd服务本身是独立的,在内存中, ...

  10. shit iview docs & i-radio bug

    shit iview docs & i-radio bug https://github.com/iview/iview/issues/5627 <i-row> <i-col ...