#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<cstring>
#include<string>
#define ll long long
#define ull unsigned long long
#define lf double
#define ld long double
using namespace std;
ll n;
lf x[20],y[20],dp[20][(1<<15)+10],ans=0x3f3f3f3f3f3f3f3f;
//dp[s] 为在 s 状态下的最优解
lf getdis(lf a,lf b,lf c,lf d){
return sqrt((c-a)*(c-a)+(d-b)*(d-b));
}
int main(){
memset(dp,0x3f,sizeof(dp));
cin>>n;
for(int i=0;i<n;i++){
cin>>x[i]>>y[i];
dp[i][(1<<i)]=getdis(0,0,x[i],y[i]);
}
for(int s=1;s<(1<<n);s++){
for(int i=0;i<n;i++){
if(!(s&(1<<i)))continue;
for(int j=0;j<n;j++){
if(i==j||(!(s&(1<<j))))continue;
dp[i][s]=min(dp[i][s],dp[j][s-(1<<i)]+getdis(x[i],y[i],x[j],y[j]));
}
}
}
for(int i=0;i<n;i++){
ans=min(ans,dp[i][(1<<n)-1]);
}
printf("%.2lf",ans);
return 0;
}
提交上去后只有 #2 AC,但本地测 #3 和 #10 的数据都是对的,上了洛谷就输出 0.00。为什么?