dp斜率优化 锯木厂选址(CEOI 2003)题解
来源:互联网 发布:淘宝助理5.5无数据 编辑:程序博客网 时间:2024/05/16 15:23
累加器传送门:
http://blog.csdn.net/NOIAu/article/details/71775000
题目:
从山顶上到山底下沿着一条直线种植了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
定义状态dp[i]表示第二个伐木场在i的最小费用
cost[i][j]表示i到j的树木到在j位置的伐木场的最小费用
sumw[i]表示w的前缀和
sumwd[i]表示w*(d的前缀和)
则有:
dp[i] = min(cost[1][j] + cost[j+1][i] + cost[i+1][n])
cost[i][j] = (sumw[j] – sumw[i-1]) * d[j] – (sumwd[j] – sumwd[i-1])
dp[i] = min(sumw[j] * d[j] – sumw[j] * d[i]) + sumw[i] * d[i] + sumw[n] * d[n] – sumw[i] * d[n] – sumwd[n]
用斜率优化,维护凸包即可
#include<cstdio>#include<iostream>#include<cstring>#define MAXN 20000+10 using namespace std;int q[MAXN],head,tail;int dp[MAXN],sumw[MAXN],sumwd[MAXN],d[MAXN];int sumd[MAXN],n,temp;int final=0x7fffffff;int getx(int i){ return sumw[i]; }int gety(int i){ return sumw[i]*sumd[i]; }int getk(int i){ return sumd[i]; }int getb(int i,int j){ return gety(j)-getk(i)*getx(j); }int main(){ scanf("%d",&n); for(register int i=1;i<=n;i++){ scanf("%d%d",&sumw[i],&sumd[i+1]); sumw[i]+=sumw[i-1];sumd[i+1]+=sumd[i]; sumwd[i]=sumwd[i-1]+(sumd[i]-sumd[i-1])*sumw[i-1]; } n++; sumwd[n]=sumwd[n-1]+(sumd[n]-sumd[n-1])*sumw[n-1]; int head,tail; head=0;tail=-1; q[++tail]=1; for(int i=2;i<n;i++){ while(head<tail&&getb(i,q[head])>=getb(i,q[head+1]))head++; dp[i]=sumwd[n]+sumw[q[head]]*(sumd[q[head]]-sumd[i])+sumw[i]*(sumd[i]-sumd[n]);; final=min(final,dp[i]); while(head<tail&&(getx(i)-getx(q[tail-1]))*(gety(q[tail])-gety(q[tail-1]))-(getx(q[tail])-getx(q[tail-1]))*(gety(i)-gety(q[tail-1]))>=0)tail--; q[++tail]=i; } printf("%d",final); return 0;}
阅读全文
0 0
- dp斜率优化 锯木厂选址(CEOI 2003)题解
- 锯木厂选址 斜率dp优化
- COGS锯木厂选址(斜率优化)
- CEOI 2004 two 锯木厂(cogs)(斜率优化)
- 【BZOJ2684】【CEOI2004】锯木厂选址(斜率优化,动态规划)
- 【CEOI2004】锯木厂选址(斜率优化入门题)
- 【CEOI2004】锯木厂选址(斜率优化入门题)
- 【斜率优化】[CEOI2004]锯木厂选址——从这里开始斜率优化的大门
- bsoj 2684 锯木场选址(DP+斜率优化)
- dp斜率优化 Pearls(Hdu1300)题解
- 【题解】CEOI 2009 从 harbingers 谈对斜率优化和凸包的全新认识 -boshi
- dp斜率优化 Hdu 3507(Print Article)详细题解
- dp斜率优化 Hdu 3045(Picnic Cows)题解
- [斜率优化的dp]storage题解
- 【HDU3507】【斜率优化DP】Print Article题解
- dp斜率优化 hdu 2829 Lawrence 题解
- dp斜率优化 Hdu 3480 Division 题解
- 【HDU3045】【斜率优化DP】Picnic Cows题解
- vue2.0之.vue文件之间$router传值
- jvm类加载机制
- android开发中高德地图点聚合自定义聚合点的样式
- Solitaire's Privacy Policy
- win10的edge打不开怎么办
- dp斜率优化 锯木厂选址(CEOI 2003)题解
- jsfiddle的demo
- c++学习笔记5:运算符重载、友元和类的类型转换
- unity3d开发环境搭建
- linux安装redis
- music的 桌面小部件的更新不及时问题
- Maven入门(含实例教程)
- 信号量与锁的差别
- vue动画 -组件