RE求助玄关
查看原帖
RE求助玄关
1007661
liyunxi0629楼主2024/5/25 14:45

rt

#include<bits/stdc++.h>
#define itn int
#define it int
using namespace std;
const int N=205;
int n;
double dp[18][34005],x[N],y[N],a[N][N],ans;
double dis(int i,int j){
	double x1=x[i]-x[j];
	double y1=y[i]-y[j];
	return sqrt(x1*x1+y1*y1);
}
int main(){
	scanf("%d",&n);
	memset(dp,127,sizeof dp);
	ans=dp[0][0];
	for(int i=1;i<=n;i++){
		scanf("%lf%lf",&x[i],&y[i]);
	}
	x[0]=0,y[0]=0;
	for(itn i=0;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			a[i][j]=dis(i,j);
			a[j][i]=a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		dp[i][(1<<(i-1))]=a[0][i];
	}
	for(int i=1;i<(1<<n);i++){
		for(int j=1;j<=n;j++){
			if(i&(1<<(j-1))==0){
				continue;
			}
			for(itn k=1;i<=n;k++){
				if(j==k){
					continue;
				}
				if(i&(1<<(k-1))==0){
					continue;
				}
				dp[j][i]=min(dp[j][i],dp[k][i-(1<<(j-1))]+a[j][k]);
			}
			
		}
	}
	for(itn i=1;i<=n;i++){
		ans=min(ans,dp[i][(1<<n)-1]);
	}
	printf("%.2f\n",ans);
	return 0;
}
2024/5/25 14:45
加载中...