题目传送门

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

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

暴力方程加前缀和优化:

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

然后变形:

  1. 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:

  1. /**************************************************************
  2.     Problem: 1096
  3.     User: yekehe
  4.     Language: C++
  5.     Result: Accepted
  6.     Time:1100 ms
  7.     Memory:47796 kb
  8. ****************************************************************/
  9.  
  10. #include <cstdio>
  11. #include <algorithm>
  12. using namespace std;
  13.  
  14. typedef long long ll;
  15.  
  16. char tc()
  17. {
  18.     static char tr[],*A=tr,*B=tr;
  19.     return A==B&&(B=(A=tr)+fread(tr,,,stdin),A==B)?EOF:*A++;
  20. }
  21.  
  22. int read()
  23. {
  24.     char c;while(c=tc(),c<''||c>'');
  25.     int x=c-'';while(c=tc(),c>=''&&c<='')x=x*+c-'';
  26.     return x;
  27. }
  28.  
  29. const int MAXN=;
  30. ll N,x[MAXN],p,c[MAXN];
  31. ll sum[MAXN],S[MAXN],f[MAXN];
  32. ll l[MAXN],h,t;
  33. double X(int i){return sum[i];}
  34. double Y(int i){return f[i]+S[i];}
  35. double get(int x,int y){return (Y(y)-Y(x))/(X(y)-X(x));}
  36.  
  37. int main()
  38. {
  39.     N=read();
  40.     register int i,j;
  41.         for(i=;i<=N;i++){
  42.             x[i]=read(),p=read(),c[i]=read();
  43.             sum[i]=sum[i-]+p;
  44.             S[i]=S[i-]+p*x[i];
  45.         }
  46.     h=t=;
  47.         for(i=;i<=N;i++){
  48.             while(h<t&&get(l[h],l[h+])<x[i])h++;
  49.             j=l[h];f[i]=f[j]+c[i]+(sum[i]-sum[j])*x[i]-(S[i]-S[j]);
  50.             while(h<t&&get(l[t],l[t-])>get(l[t],i))t--;
  51.             l[++t]=i;
  52.         }
  53.     printf("%lld",f[N]);
  54.     return ;
  55. }

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. 使用Java语言开发机器学习框架和参数服务器

    https://github.com/wudikua/ps 本项目是我自己动手实现的机器学习训练框架,代码简单,有很多不完善,但是也保留了最小可用功能 通过自己编写这个项目,可以帮助自己入门机器学习 ...

  2. Kali-linux查看打开的端口

    对一个大范围的网络或活跃的主机进行渗透测试,必须要了解这些主机上所打开的端口号.在Kali Linux中默认提供了Nmap和Zenmap两个扫描端口工具.为了访问目标系统中打开的TCP和UDP端口,本 ...

  3. selenium以及浏览器驱动下载安装

    1.下载selenium压缩包 http://pypi.python.org/pypi/selenium 下载后压缩在python文件下的lib>site-package文件夹下 2.进入sel ...

  4. MySQL慢查询日志分析提取【转】

    原文:https://www.cnblogs.com/skymyyang/p/7239010.html 一:查询slow log的状态,如示例代码所示,则slow log已经开启. mysql> ...

  5. 【题解】洛谷P1966 [NOIP2013TG] 火柴排队(树状数组+逆序对)

    次元传送门:洛谷P1966 思路 显然在两排中 每排第i小的分别对应就可取得最小值(对此不给予证明懒) 所以我们只在意两排的火柴是第几根 高度只需要用来进行排序(先把两个序列改成有序的方便离散化) 因 ...

  6. 允许跨域资源共享(CORS)携带 Cookie (转载)

    如何让CORS携带Cookie CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing).默认浏览器为了安全,遵循“同源策略”,不允许 Aj ...

  7. Spring Boot与Mybatis 借助Fastjson快速完成数据解析入库

    通过Spring Boot可以快速搭建一个项目结构,在此基础上本文就通过一个简单的例子,说明如何结合Mybatis 和 Fastjson,快速的完成一个数据的入库基本操作. 添加相关的依赖 <d ...

  8. iOS:手势与矩形、点运算相关(18-01-24更)

    1.矩形.点运算 1.获取当前的View在Window的frame 2.包含判断 3.获取点击在响应者 touchesBegan 的位置 4.UIScrollView.UITableView 实时 位 ...

  9. JAVA中基本类型和字符串之间的转换

    一.基本类型转换成字符串有三种方法: int c = 10; 1.使用包转类的toString()方法 String str1 = Integer.toString(c); 2.使用String类的v ...

  10. C语言入门学习和整理 1-3

    1. int main() { char c = 'A'; printf("c=%c", c); } int main() { ; printf("c=%c", ...