zoj3469Food Delivery[区间dp]
来源:互联网 发布:淘宝网广场舞长裤套装 编辑:程序博客网 时间:2024/06/13 13:55
原题链接:
zoj 3469 Food Delivery
题目大意:
送餐员送餐问题。有n个人叫餐,每个人都在x轴上,并且每个人都有个XX度(和等餐时间有关,据说顾客认为xx值到一定程度他的小宇宙就要爆发).现在送餐员从x轴上的某点出发,路上奔跑速度是v^-1,要一次性把所有餐送完。叫餐的人得到餐的时间和顺序不同,xx度总和也就不同。合格的送餐员要让客户体验最好,请问最少xx度和为多少
这题的做法和poj3042相似,在做当前的选择时要把当前的选择对以后的影响计算进去,
首先用 dp[i][j][0] 表示送完i--j之间的顾客后在i位置时的最小值 ,dp[i][j][1] 表示送完i--j之间的顾客后在j位置时的最小值
动态转移方程:
dp[i][j][1]=min(dp[i][j-1][1]+(cost[n]-cost[j-1]+cost[i-1])*(p[j].x-p[j-1].x),dp[i][j-1][0]+(cost[n]-cost[j-1]+cost[i-1])*(p[j].x-p[i].x)); dp[i][j][0]=min(dp[i+1][j][0]+(cost[n]-cost[j]+cost[i])*(p[i+1].x-p[i].x),dp[i+1][j][1]+(cost[n]-cost[j]+cost[i])*(p[j].x-p[i].x));
ps:由于没看清v的含义,无限受伤啊,。。。 (v不是速度额,亲)
喳喳代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define N 1100using namespace std;struct node{ int x,b;} p[N];int n,v,x0,s;int dp[N][N][2];int cost[N];bool cmp(node a,node b){ return a.x<b.x;}int solve(){ memset(dp,0x3f,sizeof(dp));//这个最大值不能太大,否则下面转移方程会尴尬。。。 dp[s][s][0]=dp[s][s][1]=0; for(int i=s; i>0; i--) for(int j=s; j<=n; j++) { if(i==s&&j==s)continue; //可以暂时不用速度,最后再处理 dp[i][j][1]=min(dp[i][j-1][1]+(cost[n]-cost[j-1]+cost[i-1])*(p[j].x-p[j-1].x),dp[i][j-1][0]+(cost[n]-cost[j-1]+cost[i-1])*(p[j].x-p[i].x)); dp[i][j][0]=min(dp[i+1][j][0]+(cost[n]-cost[j]+cost[i])*(p[i+1].x-p[i].x),dp[i+1][j][1]+(cost[n]-cost[j]+cost[i])*(p[j].x-p[i].x)); } return min(dp[1][n][0],dp[1][n][1]);}int main(){ // freopen("in.txt","r",stdin); while(scanf("%d%d%d",&n,&v,&x0)!=EOF) { bool flag=false; for(int i=1; i<=n; i++) { scanf("%d%d",&p[i].x,&p[i].b); if(p[i].x==x0) flag=true; } if(!flag) { p[n+1].x=x0; p[n+1].b=0; n++; } sort(p+1,p+1+n,cmp); for(int i=1; i<=n; i++) if(p[i].x==x0) { s=i; break; } cost[0]=0; for(int i=1; i<=n; i++) cost[i]=cost[i-1]+p[i].b; printf("%d\n",v*solve()); } return 0;}
- zoj3469Food Delivery[区间dp]
- ZOJ3469:Food Delivery(区间DP)
- Food Delivery zoj3469 区间dp
- Food Delivery(区间DP)
- 区间dp(Food Delivery )
- ZOJ 3469 Food Delivery / 区间DP
- ZOJ 3469 Food Delivery (区间dp)
- zoj 3469 Food Delivery(区间dp)
- zoj 3469 Food Delivery(区间dp)
- ZOJ 3469 - Food Delivery(区间DP)
- ZOJ 3469 Food Delivery (区间DP)
- ZOJ 3469 Food Delivery -- 区间dp
- zoj 3469 Food Delivery (区间dp)
- ZOJ - 3469 Food Delivery(区间DP)
- ZOJ - 3469 Food Delivery(区间DP)
- ZOJ 3469 Food Delivery(区间DP)
- zoj 3469 Food Delivery 【区间dp】
- zoj 3469 Food Delivery (区间DP)
- UVA10106
- SQL_学生信息管理系统验收 时实错误"91”处理
- 网页屏蔽
- UVA465
- UVA 519 Puzzle (II) (dfs + 剪枝)
- zoj3469Food Delivery[区间dp]
- Redhat下安装apache服务器
- 作用域规则
- UVA10494
- 关于设计模式的那点小事--桥接《Bridge》模式(1)
- 03-Oracle学习_常用函数
- 判断手势是否结束
- 常用的宏
- 判定NSString是否为nil,empty或者all whitespace