斜率优化

# include <stdio.h>
# include <stdlib.h>
# include <iostream>
# include <string.h>
# include <algorithm>
# define IL inline
# define RG register
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll; IL ll Read(){
RG char c = getchar(); RG ll x = 0, z = 1;
for(; c > '9' || c < '0'; c = getchar()) z = c == '-' ? -1 : 1;;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + c - '0';
return x * z;
} const int MAXN(20010), INF(2e9);
int n, Q[MAXN], tail, head, w[MAXN], d[MAXN];
int dis[MAXN], s[MAXN], ans, f[MAXN], c[MAXN], g[MAXN]; IL double Calc(RG int i, RG int j){
return 1.0 * (c[i] - c[j]) / (w[i] - w[j]);
} int main(){
n = Read();
for(RG int i = 1; i <= n; i++)
w[i] = w[i - 1] + Read(), d[i] = Read();
for(RG int i = 1; i <= n + 1; i++){
dis[i] = dis[i - 1] + d[i - 1];
s[i] = s[i - 1] + w[i - 1] * d[i - 1];
c[i] = w[i] * dis[i];
}
for(RG int i = 1; i <= n; i++)
g[i] = s[n + 1] + c[i] - w[i] * dis[n + 1];
ans = INF;
Q[0] = 1;
for(RG int i = 2; i <= n; i++){
while(head < tail && Calc(Q[head], Q[head + 1]) <= dis[i]) head++;
RG int j = Q[head];
ans = min(ans, g[i] + c[j] - w[j] * dis[i]);
while(head < tail && Calc(Q[tail - 1], Q[tail]) >= Calc(Q[tail], i)) tail--;
Q[++tail] = i;
}
printf("%d\n", ans);
return 0;
}

最新文章

  1. 简述 OAuth 2.0 的运作流程
  2. Xcode7使用插件的简单方法&amp;&amp;以及怎样下载到更早版本的Xcode
  3. 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)
  4. java常见异常集锦
  5. schema对象介绍
  6. 像C++一样写JavaScript
  7. hex和bin文件格式的区别
  8. Java IO流分析整理 .
  9. c语言线性表
  10. CSS一些设置用法
  11. InputStream中read()与read(byte[] b)
  12. HDU 2454 Degree Sequence of Graph G(Havel定理 推断一个简单图的存在)
  13. USACO Section 1.3 Combination Lock 解题报告
  14. LeetCode &amp; Q189-Rotate Array-Easy
  15. hbase高性能读取数据
  16. kubernetes 简单service的例子
  17. aptana怎么显示空格 tab和回车等
  18. PAT 1027 打印沙漏(20)(思路)
  19. javascript基于原型的语言的特点
  20. 用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法

热门文章

  1. 使用 Homebrew 安装 Git
  2. 织梦使用if判断某个字段是否为空
  3. java多线程编程——锁优化
  4. 注册表命令 regedit32
  5. Yii2框架ACF(AccessControl Filter)的使用
  6. java中错误日志的用法
  7. Python使用Mysql官方驱动(取出dict类型的数据)
  8. 【视频编解码&#183;学习笔记】8. 熵编码算法:基本算法列举 &amp; 指数哥伦布编码
  9. jmeter 脚本规范
  10. 如何获取Linux-gate.so.1动态库