★★★   输入文件:two.in   输出文件:two.out   简单对比
                  时间限制:0.1 s   内存限制:32 MB

从山顶上到山底下沿着一条直线种植了n棵老树。当地的政府决定把他们砍下来。为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂。
木材只能按照一个方向运输:朝山下运。山脚下有一个锯木厂。另外两个锯木厂将新修建在山路上。你必须决定在哪里修建两个锯木厂,使得传输的费用总和最小。假定运输每公斤木材每米需要一分钱。

输入

输入的第一行为一个正整数n——树的个数(2≤n≤20 000)。树从山顶到山脚按照1,2……n标号。接下来n行,每行有两个正整数(用空格分开)。第i+1行含有:wi——第i棵树的重量(公斤为单位)和 di——第i棵树和第i+1棵树之间的距离,1≤wi ≤10 000,0≤di≤10 000。最后一个数dn,表示第n棵树到山脚的锯木厂的距离。保证所有树运到山脚的锯木厂所需要的费用小于2000 000 000分。

输出

输出只有一行一个数:最小的运输费用。

样例

输入

9
1 2
2 1
3 3
1 1
3 2
1 6
2 1
1 2
1 1

输出

26

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 using namespace std;
10 typedef long long LL;
11 typedef double db;
12 const int maxn=20010;
13 LL ANS=1e15;
14 int N,w[maxn],d[maxn],Sw[maxn],Sd[maxn],cost[maxn];
15 int Q[maxn],head,tail=-1;
16 inline double calc(int j1,int j2){
17     return ((db)Sw[j1]*(db)Sd[j1]-(db)Sw[j2]*(db)Sd[j2])/((db)Sw[j1]-(db)Sw[j2]);
18 }
19 inline int All(int j,int i){
20     return cost[i]-cost[j-1]-Sw[j-1]*(Sd[i]-Sd[j-1]);
21 }
22 inline LL ask_ans(int j,int i){
23     return (LL)cost[j]+(LL)All(j+1,i)+(LL)All(i+1,N+1);
24 }
25 int main(){
26     //freopen("two.in","r",stdin);
27     //freopen("two.out","w",stdout);
28     scanf("%d",&N);
29     for(int i=1;i<=N;i++){
30         scanf("%d%d",&w[i],&d[i]);
31         Sw[i]=Sw[i-1]+w[i];
32          Sd[i+1]=Sd[i]+d[i];
33          cost[i]=cost[i-1]+Sw[i-1]*d[i-1];
34     }
35     cost[N+1]=cost[N]+Sw[N]*d[N];
36     Sw[N+1]=Sw[N];
37     for(int i=1;i<=N;i++){
38         while(head<tail&&calc(Q[head],Q[head+1])<=Sd[i]){
39              head++;
40          }
41         ANS=min(ANS,ask_ans(Q[head],i));
42         while(head<tail&&calc(Q[tail-1],Q[tail])>calc(Q[tail],i)){
43              tail--;
44          }
45          Q[++tail]=i;
46     }
47     printf("%lld",ANS);
48     return 0;
49 }

  

转载于:https://www.cnblogs.com/CXCXCXC/p/5416158.html

cogs 362. [CEOI2004]锯木厂选址相关推荐

  1. 【斜率优化】[CEOI2004]锯木厂选址——从这里开始斜率优化的大门

    题目 好久没有碰过斜率优化了,我们从这里来开始复习一下, 先看一下题目: 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂.木材 ...

  2. [题解]CEOI 2004 锯木厂选址

    [题目描述] 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂.木材只能按照一个方向运输:朝山下运.山脚下有一个锯木厂.另外两个 ...

  3. Two Sawmills(锯木厂选址)

    http://main.edu.pl/en/archive/ceoi/2004/two 斜率优化DP,应该说是第一道斜率优化DP了,推公式的时候各种坑,还是参照了hzq神牛的思路,细节方面稍有不同, ...

  4. 提高篇 第五部分 动态规划 第6章 斜率优化动态规划

    例1 任务安排(TYVJ1098) [tyvj1098]任务安排(dp)_薇小薇-CSDN博客 Tyvj1098 任务安排_Monster__Yi的博客-CSDN博客 P2365 任务安排 任务安排 ...

  5. 斜率优化dp 的简单入门

    不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...

  6. 关于最近打的几题斜率优化的总结。加几AC代码。

    斜率优化错误总结 网上说很多OJ桑的斜率优化大多都是模板题- -,结果每次都跪Orz...在此总结一些常见错误: 1:不得不说斜率优化很多时候计算式很长- -,代码容易错细节- -. 2:其次就是弹队 ...

  7. 动态规划优化_斜率优化

    先来看一道题(HDU3507): 题意:给出N个单词,每个单词有个非负权值Ci,将k个单词排在一行的费用为(∑Ci)^2+M.求最优方案,使得总费用最小. 我们很容易得到一个O(N^2)的算法: s[ ...

  8. 《信息学奥赛一本通》提高版题单

    第一部分 基础算法 第 1 章 贪心算法 #10000 「一本通 1.1 例 1」活动安排 #10001 「一本通 1.1 例 2」种树 #10002 「一本通 1.1 例 3」喷水装置 #10003 ...

  9. 一本通提高篇在线提交地址

    一本通提高篇 1 基础算法 1.1 贪心算法 1.1.1 P2018  [第一章例题1.1]活动安排正确: 9 提交: 17 比率: 52.94 % 1.1.2 P2021 [第一章例题1.2]种树正 ...

最新文章

  1. navicat for mysql 怎么连接远程数据库服务器
  2. Py:数据挖掘之对微信朋友圈好友的性别、区域、昵称、签名信息进行情感分析
  3. Qt学习笔记-Qt程序切换皮肤
  4. Python新手输出代码
  5. 一次安装tengine的经历
  6. 毕业设计项目,微博语料情感分析,文本分类
  7. Linux中断技术、门描述符、IDT(中断描述符表)、异常控制技术总结归类
  8. jmeter常用功能
  9. qmail 发邮件故障
  10. 决策树模型(R语言)
  11. html中http502怎么解决,Http Error 502 解决方法
  12. console接口配置登录密码
  13. 【思维导图】一图读懂“心脑相连”最新成果:艾伦研究所发现心跳时,大脑会抖动
  14. ANSYS | 螺栓模拟
  15. 恭喜元宇宙产业委秘书长何超、执行秘书长武艳芳成为南京河西CBD发展大使
  16. 汉诺塔非递归算法分析与实现
  17. IKEv2与IKEv1的差异
  18. 正极前驱体生产废水除磷
  19. 解决Laydate在弹出层中一闪而过的问题
  20. 饶天亮到访深圳时空梭,区块链技术与名人明星产业碰撞出新火花

热门文章

  1. 启用IIS的Gzip压缩 【转】
  2. linux安装sphinx
  3. 修改SQL SERVER内置存储过程
  4. datagrid分页问题(前后跳页)《控件版》
  5. python采集bandwidth信息
  6. Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序
  7. 软件调试的艺术笔记:GDB
  8. OpenCV代码提取:cvtColor函数的实现
  9. 【linux】Valgrind工具集详解(四):抑制错误
  10. mutations vuex 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...