#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<vector>
#include<cmath>
using namespace std;
#define inf 0x3f3f3f3f
int n;
double x[202],y[202];
double d[202][202];
double dp[202][202];
double dis(double a,double b,double c,double d)
{
return sqrt((a-c)*(a-c)+(b-d)*(b-d));
}
int main()
{
int i,j,k;
while(cin>>n)
{
for(i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
for(j=1;j<i;j++)
d[i][j]=dis(x[i],y[i],x[j],y[j]);
}
dp[2][1]=d[2][1];
for(i=3;i<=n;i++)
{
for(j=1;j<=i-2;j++)
dp[i][j]=dp[i-1][j]+d[i][i-1];
dp[i][i-1]=inf;
for(j=1;j<=i-2;j++)
if(dp[i-1][j]+d[i][j]<dp[i][i-1])
dp[i][i-1]=dp[i-1][j]+d[i][j];
}
printf("%.2lf\n",dp[n][n-1]+d[n][n-1]);
}
}
hdu-2224-The shortest path-双调TSP
最新推荐文章于 2020-03-02 17:25:47 发布