【解题思路】

  预处理spi=∑pj(j∈[1,i]),si=si-1+(xi-xi-1)*spi-1表示把工厂1~i-1的产品都运到工厂i的花费。于是把工厂j+1~i的产品都运到工厂i的花费为si-sj-spj*(xi-xj)。

  于是易得转移方程:f[i]=min{f[j]+s[i]-s[j]-sp[j]*(x[i]-x[j])+c[i]},转移成同的形式:((f[j]-s[j]+sp[j]*x[j])-(f[k]-s[k]+sp[k]*x[k]))/(sp[j]-sp[k])<x[i]。

  因为较优转移方式为min,所以维护一个下凸壳即可。听说题目并没有保证x升序?(可能是我星际)所以假装要先排下序,复杂度O(nlog2n)。

【参考代码】

 #include <algorithm>
#define range(i,low,high) for(register int i=(low);i<(high);++i)
#define dange(i,high,low) for(register int i=(high);i>(low);--i)
#define __function__(type) __attribute__((optimize("-O2"))) inline type
#define __procedure__ __attribute__((optimize("-O2"))) inline void
using namespace std; //quick_io {
#include <cctype>
#include <cstdio> __function__(long long) getint()
{
char c=getchar(); for(;!isdigit(c)&&c!='-';c=getchar());
short s=; for(;c=='-';c=getchar()) s*=-; long long r=;
for(;isdigit(c);c=getchar()) r=(r<<)+(r<<)+c-''; return r*s;
}
//} quick_io struct node
{
long long x,p,c;
__procedure__ input() {x=getint(),p=getint(),c=getint();}
__function__(bool) operator<(const node&t)const{return x<t.x;}
}factory[]; int q[]; long long s[]={},sp[]={},f[]; __function__(long long) getDP(const int&i,const int&j)
{
return f[j]+s[i]-s[j]-sp[j]*(factory[i].x-factory[j].x)+factory[i].c;
}
__function__(long long) getUP(const int&j,const int&k)
{
return f[j]-f[k]-s[j]+s[k]+sp[j]*factory[j].x-sp[k]*factory[k].x;
}
__function__(long long) getDOWN(const int&j,const int&k)
{
return sp[j]-sp[k];
} int main()
{
int n=getint(); range(i,,n+) factory[i].input();
range(i,,n+)
{
s[i]=s[i-]+(factory[i].x-factory[i-].x)*sp[i-];
sp[i]=sp[i-]+factory[i].p;
}
int head=,tail=; sort(factory+,factory+n+),f[]=;
range(i,,n+)
{
for(;head+<tail&&
getUP(q[head+],q[head])<factory[i].x*getDOWN(q[head+],q[head]);
++head
);
f[i]=getDP(i,q[head]);
for(;head+<tail&&
getUP(i,q[tail-])*getDOWN(q[tail-],q[tail-])<
getUP(q[tail-],q[tail-])*getDOWN(i,q[tail-]);
--tail
);
q[tail++]=i;
}
return printf("%lld\n",f[n]),;
}

bzoj1096题解的更多相关文章

  1. BZOJ1096:[ZJOI2007]仓库建设——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1096 L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于 ...

  2. 【BZOJ1096】【ZJOI2007】仓库建设(斜率优化,动态规划)

    [BZOJ1096][ZJOI2007]仓库建设(斜率优化,动态规划) 题面 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原 ...

  3. BZOJ1096 [ZJOI2007]仓库建设 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8696410.html 题目传送门 - BZOJ1096 题意 给定两个序列$a,b,X$,现在划分$a$序列. ...

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

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

  5. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  6. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  7. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  8. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  9. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

随机推荐

  1. 【sql】牛客网练习题 (共 61 题)

    [1]查找最晚入职员工的所有信息 CREATE TABLE `employees` ( `emp_no` ) NOT NULL, `birth_date` date NOT NULL, `first_ ...

  2. java多线程面试题_线程并发面试题

    1.什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个 ...

  3. Tmux 简单配置使用

    Tmux Prefix (prefix) Tmux 使用 Prefix 以将自身的快捷键与其它应用区分,运行 Tmux 快捷键时首先按下这个 Prefix (默认是 Ctrl-b 组合键),松手后紧接 ...

  4. SQL 查询子句

    SQL WHERE Clause(查询子句) WHERE 子句用于过滤记录. SQL WHERE 子句 WHERE子句用于提取满足指定标准的记录. SQL WHERE 语法 SELECT column ...

  5. 简单的使用Qt的QCustomplot画图

    一.新建一个widget工程 二.将Qcustomplot文件复制到项目下 三.右键qt项目增加已存在的文件 四.在.pro中添加 QT += widgets printsupport 五.在.h中添 ...

  6. bzoj4403题解

    [参考代码] #pragma GCC optimize(2) #include <cstdlib> #define function(type) __attribute__((optimi ...

  7. STM32库中自定义的数据类型

    在头文件 <stdint.h> 中 1 /* exact-width signed integer types */ typedef signed char int8_t; typedef ...

  8. 转-C++之手写strcpy

    转自:strcpy函数的实现 知strcpy函数的原型是: char *strcpy(char *dst, const char *src); 实现strcpy函数 解释为什么要返回char * 假如 ...

  9. python中处理.mat文件

    python中处理.mat文件 背景 在实际使用python的时候,发现很多数据都是使用.mat的形式保存,所以,如何使用python读写.mat文件成为了许多python使用者必备的技能. -v7. ...

  10. 1.2 JSX 语法

    官方文档 https://facebook.github.io/react/docs/jsx-in-depth.html JSX 语法听上去很讨厌,但当真正使用的时候会发现,JSX 的写法在组件的组合 ...