提交时间:2024-05-08 14:55:01

运行 ID: 29448

#include<bits/stdc++.h> using namespace std; #define int long long const int MAXN=210,inf=1000000000; int n,m,k,a[MAXN],b[MAXN]; double ans,dis[MAXN][MAXN]; bool cs[MAXN]; void dfs(int now,int sum,double num){ if(num>=ans)return; if(now==n+1){ if(sum==m)ans=num; return; } if(sum<m){ cs[now]=1; double tmp=0; for(int i=1;i<now;i++)if(cs[i])tmp=max(tmp,dis[now][i]); dfs(now+1,sum+1,max(tmp,num)); } cs[now]=0; dfs(now+1,sum,num); } void slv(){ ans=inf; scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++){ scanf("%lld%lld",&a[i],&b[i]); } for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++)dis[i][j]=dis[j][i]=sqrt(1.0*(a[i]-a[j])*(a[i]-a[j])+1.0*(b[i]-b[j])*(b[i]-b[j])); if(m==2){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)if(i!=j)ans=min(ans,dis[i][j]); printf("%.6f",ans); return; } if(m==3){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ for(int p=1;p<=m;p++){ if(i!=j&&j!=p&&i!=p)ans=min(ans,max(dis[i][j],max(dis[i][p],dis[j][p]))); } } } printf("%.6f\n",ans); return; } dfs(1,0,0); printf("%.6f\n",ans); return; } signed main(){ slv(); return 0; }