不想多说
#include<algorithm>
#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
#define maxn 1000+10
struct node{
int x, y;
}p[maxn];
int n;
double ans;
double d[maxn][maxn];
double dist(int i, int j){
int dx = p[i].x - p[j].x;
int dy = p[i].y - p[j].y;
return hypot(dx, dy);
}
double dp(int i, int j){
double &ans = d[i][j];
if (ans > 0)return ans;
if (i == n - 1)
return ans = dist(i, n) + dist(j, n);
ans = min(dp(i + 1, j) + dist(i, i + 1), dp(i + 1, i) + dist(j, i + 1));
return ans;
}
int main(){
while (scanf("%d", &n) != EOF){
memset(d, 0, sizeof(d));
for (int i = 1; i <= n; i++){
scanf("%d%d", &p[i].x, &p[i].y);
}
dp(2, 1);
ans = dist(1, 2) + d[2][1];
printf("%.2lf\n", ans);
}
return 0;
}