题目链接:http://codeforces.com/problemset/problem/301/B
题目思路:最短路,这道题根据数据把图建出来就好了,map[a][b]为从a到b的花费,map[a][b]等于横纵坐标差的绝对值的和减去到达b点后获得的时间
AC代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
#define inf 0x3f3f3f3f
struct
{
int x,y;
}p[105];
int map[105][105],n,ai[105];
void ddd()
{
int i,j,dist[105],vis[105]={0},cur,next;
cur=0;
memset(dist,inf,sizeof(dist));
dist[0]=0;
int m=n;
while(m--)
{
int min=inf;
vis[cur]=1;
for(i=0;i<n;i++)
{
if(vis[i])continue;
if(dist[cur]+map[cur][i]<dist[i])
dist[i]=dist[cur]+map[cur][i];
if(dist[i]<min){min=dist[i],next=i;}
}
cur=next;
}
printf("%d",dist[n-1]);
}
int main()
{
int d,i,j;
scanf("%d%d",&n,&d);
for(i=1;i<n-1;i++)
scanf("%d",&ai[i]);
for(i=0;i<n;i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
for(j=0;j<i;j++)
{
map[i][j]=d*(fabs(p[i].x-p[j].x)+fabs(p[i].y-p[j].y))-ai[j];
map[j][i]=d*(fabs(p[j].x-p[i].x)+fabs(p[i].y-p[j].y))-ai[i];
}
}
ddd();
return 0;
}
写这道题的时候十分没感觉。。