测试点过了,为什么不过??
查看原帖
测试点过了,为什么不过??
544113
不慕放糖楼主2021/8/19 16:28
#include<bits/stdc++.h>
using namespace std;
int n,vis[20];
double ans=1e9;
double a[20],b[20],dp[65000][17];
double dis(int x,int y){
	sqrt( (a[x]-a[y]) * (a[x]-a[y])+ (b[x]-b[y]) * (b[x]-b[y]) );
	
}
void  dfs(int p,int cur,double s,int bi){//p吃了点,cur 当前的点 
	if(s>ans) return;
	if(p==n) {ans=min(ans,s);	return ;	}
	for(int i=1; i<=n ;i++){//枚举下个点 
		if(!vis[i]){
			int t=bi+(1<<(i-1 ));
			if(dp[t][i]!=0&&dp[t][i]<=s+dis(cur,i)) continue;
			vis[i]=1;
			dp[t][i]=s+dis(cur,i);
			dfs(p+1,i,dp[t][i],t);
			vis[i]=0;
		}
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
	} 
	dfs(0,0,0,0);
	printf("%.2lf",ans); 
}
2021/8/19 16:28
加载中...