#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const double INF=1e18;
const int maxn=1010;
double dp[maxn][maxn],dis[maxn][maxn];
struct node{
double x,y;
}pot[maxn];
double get_dis(int i,int j){
return sqrt((pot[i].x-pot[j].x)*(pot[i].x-pot[j].x)+(pot[i].y-pot[j].y)*(pot[i].y-pot[j].y));
}
/*
[i][j]可以到达[i+1][j]或者 [i+1][i]
*/
void get_dp(int n){
dp[1][1]=0.0;
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++){
dp[i][j]=min(dp[i][j],dp[i-1][j]+dis[i][i-1]);
dp[i][i-1]=min(dp[i][i-1],dp[i-1][j]+dis[j][i]);
}
}
}
int main(){
int n;
while(scanf("%d",&n)==1){
for(int i=1;i<=n;i++){
scanf("%lf %lf",&pot[i].x,&pot[i].y);
dis[i][i]=0.0;
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
dis[i][j]=dis[j][i]=get_dis(i,j);
dp[i][j]=dp[j][i]=INF;
}
}
get_dp(n);
printf("%.2f\n",dp[n][n-1]+dis[n-1][n]);
}
return 0;
}
Tour UVA - 1347
最新推荐文章于 2019-12-20 16:33:11 发布