方程:

$\Large f(i)=min(f(j)+\sum\limits_{k=j+1}^{i}(x_i-x_k)*p_k)+c_i$

显然这样的方程复杂度为$O(n^3)$极限爆炸,所以我们要换一个方程

设$S(i)=\sum\limits_{k=1}^i(x_n-x_k)*p_k$且$A(i)=\sum\limits_{k=1}^ip_k$

则$S(i)-S(j)=\sum\limits_{k=j+1}^i(x_n-x_k)*p_k$,这和原方程很像

最终方程就可以化成

$\Large f(i)=min(f(j)+S(i)-S(j)-(A(i)-A(j))*(x_n-x_i))+c_i$

若对于某个$i$,$j$比$k$优,则

$f(j)+S(i)-S(j)-(A(i)-A(j))*(x_n-x_i)\le f(k)+S(i)-S(k)-(A(i)-A(k))*(x_n-x_i)$

化简得

$\frac{f(j)-S(j)-f(k)+S(k)}{A(j)-A(k)}\le x_i-x_n$

维护一个下凸壳即可

代码

#include<cstdio>
#define LL long long
#define maxn 1000005
#define inf 0x3fffffffffffffff
int x[maxn],p[maxn],c[maxn],que[maxn],s,t=;
LL S[maxn],A[maxn],f[maxn];
LL calc(int i,int j){
if(A[i]==A[j])return inf;
return (f[i]-S[i]-f[j]+S[j])/(A[i]-A[j]);
}
void insert(int i){
while(s<t-&&calc(i,que[t-])<=calc(que[t-],que[t-]))t--;
que[t++]=i;
}
int main(){
int n;scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d%d",x+i,p+i,c+i),A[i]=A[i-]+p[i];
for(int i=;i<=n;i++){
S[i]=S[i-]+1ll*(x[n]-x[i])*p[i];
while(s<t-&&calc(que[s+],que[s])<=x[i]-x[n])s++;
int w=que[s];
f[i]=f[w]+S[i]-S[w]-(A[i]-A[w])*(x[n]-x[i])+c[i];
insert(i);
}
printf("%lld",f[n]);
return ;
}

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

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

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

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

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

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

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

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

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

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

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

  6. 【BZOJ-1096】仓库建设 斜率优化DP

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

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

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

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

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

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

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

随机推荐

  1. 解决php-fpm占用cpu memory过高,开启php-fpm request_slowlog_timeout

    项目刚从win下挪到linux下,发现cpu过高,内存也占用较多,以下是我解决问题的过程: 首先更改php-fpm配置 vim /usr/local/php/etc/php-fpm.conf 找到 r ...

  2. linux下mysql权限配置

    先登入mysql mysql -u root -p 然后回车键入密码! 1.2 赋予主机B操作数据库的权限 mysql> grant usage on *.* to username@192.1 ...

  3. hdu多校第五场1002 (hdu6625) three arrays 字典树/dfs

    题意: 给你两个序列a,b,序列c的某位是由序列a,b的此位异或得来,让你重排序列ab,找出字典序最小的序列c. 题解: 如果能找到a,b序列中完全一样的值当然最好,要是找不到,那也尽量让低位不一样. ...

  4. POJ2449-A*算法-第k短路

    (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:传送门  原题目描述在最下面.  给你一个有向图,求指定节点间的第k短路. 思路:  先反向跑出从终点开始的到每个节点的最短距离 ...

  5. 20140402 cmake编译错误原因 同时装了vs2010和vs2012

    1.cmake编译错误原因 在用cmake编译opencv出现的错误 The CXX compiler identification is MSVC 16.0.30319.1 The C compil ...

  6. 对Springdata模块的简单理解

    有关于Spring对数据库的操作属于为Spring中的Springdata模块,对数据库的操作.Spring对JDBC和Mybatis都有封装与简化 可以从以下角度学习研究 SpringData: 1 ...

  7. Linux ls 命令实现(简化版)

    在学习linux系统编程的时候,实现了ls命令的简化版本号. 实现的功能例如以下: 1. 每种文件类型有自己的颜色 (- 普通文件, d 文件夹文件, l 链接文件. c 字符设备文件. b 快设备文 ...

  8. Linux系统搭建Red5服务器

    Linux系统搭建Red5服务器 Red5 是 支持Windows,Linux等多平台的RTMP流媒体服务器,Windows下搭建相对容易,图形界面操作比较简单,Linux服务器的环境下没有图形界面, ...

  9. JS函数 返回值的函数 return sum;或者result = add2(3,4);

    返回值的函数 思考:上一节函数中,通过"document.write"把结果输出来,如果想对函数的结果进行处理怎么办呢? 我们只要把"document.write(sum ...

  10. sql (12) HAVING

    HAVING 子句在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. 新建表 StudentSS_id Grade Name phone1 98 小明 12345 ...