Mobile Service_纪中1327_dp

来源:互联网 发布:淘宝调研网站 编辑:程序博客网 时间:2024/05/18 19:19

Description

  一个公司有三个移动服务员。如果某个地方有一个请求,某个员工必须赶到那个地方去(那个地方没有其他员工),某一时刻只有一个员工能移动。被请求后,他才能移动,不允许在同样的位置出现两个员工。从p到q移动一个员工,需要花费c(p,q)。这个函数没有必要对称,但是c(p,p)=0。公司必须满足所有的请求。目标是最小化公司花费。

Input

  第一行有两个整数L,N(3<=L<=200, 1<=N<=1000)。L是位置数;N是请求数。每个位置从1到L编号。下L行每行包含L个非负整数。第i+1行的第j个数表示c(i,j) ,并且它小于2000。最后一行包含N个数,是请求列表。一开始三个服务员分别在位置1,2,3。

Output

  一个数M,表示最小服务花费。

Sample Input

5 9

0 1 1 1 1

1 0 2 3 2

1 1 0 4 1

2 1 5 0 1

4 2 3 4 0

4 2 4 1 5 4 3 2 1

Sample Output

5

思路:

这是一题dp
首先不难想到

f[i][j][k][l]=min(f[i1][x][y][z])

然后,会炸空间和时间
因为只有前一状态对当前状态有用,所以它能滚起来。对于空间问题我们考虑用滚动数组优化

时间上,我们可以考虑如下情况:

  1. 对于每一次询问q[i],则时间i后必有一位服务员在q[i]的位置上
  2. 由于三个服务员的顺序可以改变,所以只要枚举两个服务员的位置,即可得知第三服务员所处在q[i]处
  3. 然后就愉快地dp吧

你们要的方程在代码里

代码在这里:

var  f:array[0..1,0..300,0..300]of longint;  c:array[0..300,0..300]of longint;  q:array[0..2000]of longint;  n,m,g,inf:Longint;function min(x,y:Longint):Longint;begin  min:=x;  if y<x then  min:=y;end;procedure dp;var  i,j,k:Longint;begin  g:=0;  for i:=2 to m do  begin    g:=g xor 1;    for j:=1 to n do for k:=1 to n do f[g,j,k]:=inf;    for j:=1 to n do    for k:=1 to n do    if (j<>k)and(q[i-1]<>k)and(q[i-1]<>j) then    begin      f[g,j,k]:=min(f[g,j,k],f[g xor 1,j,k]+c[q[i-1],q[i]]);      f[g,k,j]:=f[g,j,k];      f[g,q[i-1],k]:=min(f[g,q[i-1],k],f[g xor 1,j,k]+c[j,q[i]]);      f[g,k,q[i-1]]:=f[g,q[i-1],k];      f[g,q[i-1],j]:=min(f[g,q[i-1],j],f[g xor 1,j,k]+c[k,q[i]]);      f[g,j,q[i-1]]:=f[g,q[i-1],j];    end;  end;end;procedure print;var  i,j,ans:Longint;begin  ans:=maxlongint;  for i:=1 to n do  for j:=1 to n do  if f[g,i,j]<ans then  ans:=f[g,i,j];  writeln(ans);end;procedure init;var  i,j:Longint;begin  readln(n,m);  for i:=1 to n do  for j:=1 to n do  read(c[i,j]);  for i:=1 to m do  read(q[i]);  fillchar(f,sizeof(f),$7f);  inf:=f[0,1,2];  f[0,1,2]:=c[3,q[1]];  f[0,1,3]:=c[2,q[1]];  f[0,2,3]:=c[1,q[1]];  f[0,2,1]:=f[0,1,2];  f[0,3,1]:=f[0,1,3];  f[0,3,2]:=f[0,2,3];end;begin  init;  dp;  print;end.
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3岁宝宝不爱看书怎么办 6岁不好好吃饭怎么办 二岁宝宝不吃饭怎么办 2岁半宝宝不爱吃饭怎么办 宝宝一岁了不爱吃饭怎么办 一岁多的宝宝不爱吃饭怎么办 小孩不吃饭还吐怎么办 一岁婴儿不吃饭怎么办 写字久了肩膀疼怎么办 6岁儿童不写字怎么办 孩子字写得丑怎么办 6岁儿童怕写字怎么办 高三学生上课困怎么办 高三学生压力大怎么办 数学会做的做错怎么办 脑子很笨反应慢怎么办 好学生考砸了怎么办 孩子写作业范愁怎么办 对粗心的孩子该怎么办 做计算题总出错怎么办 孩子字写得不好怎么办 3岁宝宝数学不好怎么办 十个月的宝宝拉肚子怎么办 刚生的宝宝拉肚子怎么办 我给兔子洗澡了怎么办 刚生的小狗脐带怎么办 宠物兔不想养了怎么办 兔子被打不动了怎么办 ai画板大小会变怎么办 和小孩生肖相冲怎么办 小孩和父母相冲怎么办 4岁宝宝抵抗力差怎么办 5岁儿童抵抗力差怎么办 格力小狗腿歪了怎么办 泰迪后腿骨折了怎么办 狗的后腿骨折了怎么办 跟丢了萨尔怎么办 去当兵欠的网贷怎么办 辅警体能过不了怎么办 蛙跳完后大腿疼怎么办 体能太差在部队怎么办