题解
2024-09-22 21:54:37
发布于:广东
3阅读
0回复
0点赞
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#include<cstring>
#include<vector>
using namespace std;
int n;
double ans;
double f[1<<16][20],x[20],y[20];
const double inf=1000000005;
inline int read() {
int ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-f;ch=getchar();}
while(ch>='0'&&ch<='9') {ret=(ret<<3)+(ret<<1)+ch-'0';ch=getchar();}
return ret*f;
}
int main() {
n=read();
for(int i=1;i<=n;i++) {
scanf("%lf %lf",&x[i],&y[i]);
}
for(int i=0;i<(1<<16);i++) {
for(int j=0;j<=20;j++) f[i][j]=inf;
}
f[1][0]=0;x[0]=y[0]=0;
for(int i=1;i<1<<(n+1);i++) {
for(int j=1;j<=n;j++) if((i>>j)&1) {
for(int k=0;k<=n;k++) if(((i^(1<<j))>>k)&1) {
double w=sqrt((x[j]-x[k])*(x[j]-x[k])+(y[j]-y[k])*(y[j]-y[k]));
f[i][j]=min(f[i][j],f[i^(1<<j)][k]+w);
}
}
}
ans=inf;
for(int i=1;i<=n;i++) {
ans=min(ans,f[(1<<(n+1))-1][i]);
}
printf("%.2f",ans);
return 0;
}
这里空空如也
有帮助,赞一个