题目传送门

一道斜率优化的题目,加深了印象。

设sum[i]=∑p[i],S[i]=∑p[i]*x[i]。

暴力方程加前缀和优化:

f[i]=min(f[j]+c[i]+(sum[i]-sum[j])*x[i]-(S[i]-S[j])};

然后变形:

f[j]+c[i]+sum[i]*x[i]-(S[i]-S[j])=x[i]*sum[j]+f[i]
y =k x +b

求最小截距,因为k单调,所以是个下凸包,单调队列维护。

//红体字在y相减时会抵消,所以无影响。

code:

/**************************************************************
    Problem: 1096
    User: yekehe
    Language: C++
    Result: Accepted
    Time:1100 ms
    Memory:47796 kb
****************************************************************/
 
#include <cstdio>
#include <algorithm>
using namespace std;
 
typedef long long ll;
 
char tc()
{
    static char tr[],*A=tr,*B=tr;
    return A==B&&(B=(A=tr)+fread(tr,,,stdin),A==B)?EOF:*A++;
}
 
int read()
{
    char c;while(c=tc(),c<''||c>'');
    int x=c-'';while(c=tc(),c>=''&&c<='')x=x*+c-'';
    return x;
}
 
const int MAXN=;
ll N,x[MAXN],p,c[MAXN];
ll sum[MAXN],S[MAXN],f[MAXN];
ll l[MAXN],h,t;
double X(int i){return sum[i];}
double Y(int i){return f[i]+S[i];}
double get(int x,int y){return (Y(y)-Y(x))/(X(y)-X(x));}
 
int main()
{
    N=read();
    register int i,j;
        for(i=;i<=N;i++){
            x[i]=read(),p=read(),c[i]=read();
            sum[i]=sum[i-]+p;
            S[i]=S[i-]+p*x[i];
        }
    h=t=;
        for(i=;i<=N;i++){
            while(h<t&&get(l[h],l[h+])<x[i])h++;
            j=l[h];f[i]=f[j]+c[i]+(sum[i]-sum[j])*x[i]-(S[i]-S[j]);
            while(h<t&&get(l[t],l[t-])>get(l[t],i))t--;
            l[++t]=i;
        }
    printf("%lld",f[N]);
    return ;
}

BZOJ1096_仓库建设_KEY的更多相关文章

  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]仓库建设

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4193  Solved: 1845 Description L公司有N个工厂,由高到底分布在一座山上. ...

  4. BZOJ 1096 【ZJOI2007】 仓库建设

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

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

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

  6. BZOJ_1096_[ZJOI2007]_仓库建设_(斜率优化动态规划+单调队列+特殊的前缀和技巧)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1096 有\(n\)个工厂,给出第\(i\)个工厂的到1号工厂的距离\(x[i]\),货物数量\ ...

  7. 【BZOJ 1096】 [ZJOI2007]仓库建设 (斜率优化)

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3940  Solved: 1736 Description ...

  8. bzoj 1096: [ZJOI2007]仓库建设 斜率優化

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2242  Solved: 925[Submit][Statu ...

  9. bzoj 1096 [ZJOI2007]仓库建设(关于斜率优化问题的总结)

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

随机推荐

  1. 【[SDOI2014]数数】

    被慎老师教育数位\(dp\)怎么写了 看来我数位\(dp\)的写法太落后了 这道题很显然就是一个\(AC\)自动机上的数位\(dp\),按照套路 我们可以设计\(dp[i][j][0/1]\)表示匹配 ...

  2. 【[ZJOI2012]灾难】

    好像很久之前就看过这道题,大概是刚学\(LCA\)的时候 之后当时肯定是不会的呀 现在发现这道题并不是非常难 首先我们发现这个灭绝的关系非常像一棵树,我们建出这个灭绝树求一个前缀和就可以啦 那么应该怎 ...

  3. Java50道经典习题-程序13 根据条件求数字

    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?分析:完全平方数:如果一个数能是由两个相同的数相乘的结果,那么这个数就是完全平方数,例如:9==3*3: ...

  4. [转]开源实时视频码流分析软件:VideoEye

    原文太长了,就直接贴上链接,以便大家学习. 引文链接:开源实时视频码流分析软件:VideoEye

  5. linux内核中socket的创建过程源码分析(总结性质)

    在漫长地分析完socket的创建源码后,发现一片浆糊,所以特此总结,我的博客中同时有另外一篇详细的源码分析,内核版本为3.9,建议在阅读本文后若还有兴趣再去看另外一篇博文.绝对不要单独看另外一篇. 一 ...

  6. Reading Meticulous Measurement of Control Packets in SDN

    SOSR 17 概要 网络流量中有一部分是用于网络管理,(根据packet process survey,该部分流量属于包转发的slow path部分)由于sdn的数控分离,交换机需要向控制器发送大量 ...

  7. 用javascript编写地区表单ES6

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Difftime

    功 能:返回两个time_t型变量之间的时间间隔,即 计算两个时刻之间的时间差. 用 法: double difftime(time_t time2, time_t time1);

  9. PHP-----PHP程序设计基础教程----第三章函数

    3.1 初识函数 3.1.1 函数的定义 语法: function 函数名([参数1,参数2,......]) { 函数体 } (1)function:在声明函数时必须使用的关键字 (2)函数名:创建 ...

  10. 修复 Cydia 不能上网的问题

    使用 h3lix 越狱 10.3.3 的 iPhone5,进入 Cydia 不能联网解决方法:打开 Cydia,进入已安装列表,点击 Cydia Installer 卸载,然后看到桌面上就没有 Cyd ...