1 条题解
-
1HLBhahaqiu LV 8 MOD @ 2020-08-30 15:25:02
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;const double INF=1e30;
const int MAXN=1003;
struct node
{
double x,y;
bool operator<(const node&b)const
{
return x<b.x;
}
}a[MAXN];
int n;
double ans=INF;
double f[MAXN][MAXN];
double d[MAXN][MAXN];double getd(int i,int j)
{
double x=fabs(a[i].x-a[j].x);
double y=fabs(a[i].y-a[j].y);
return sqrt(x*x+y*y);
}void init()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].x>>a[i].y;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
d[i][j]=getd(i,j),f[i][j]=INF;
}void DP()
{
f[1][2]=d[1][2];
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
f[i][j+1]=min(f[i][j+1],f[i][j]+d[j][j+1]);
f[j][j+1]=min(f[j][j+1],f[i][j]+d[i][j+1]);
}
for(int i=1;i<=n-1;i++)
ans=min(ans,f[i][n]+d[i][n]);
printf("%.2lf\n",ans);
}int main()
{
init();
DP();
}
- 1