玄关求助大佬(状压DP一直输出0)
  • 板块P1433 吃奶酪
  • 楼主wky2011
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/1/25 18:16
  • 上次更新2025/1/25 19:29:22
查看原帖
玄关求助大佬(状压DP一直输出0)
1195678
wky2011楼主2025/1/25 18:16
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=20;
const double oo=1e308;
int x[N],y[N],n;
double dis(int i,int j){
	return ((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
double f[(1<<N)][N];
signed main(){
	cin>>n;
	for(int i=0;i<=1<<n;i++){
		for(int j=0;j<=n;j++){
			f[i][j]=oo;
		}
	}
	for(int i=0;i<n;i++){
		cin>>x[i]>>y[i];
	}
	f[1][0]=0.0;
	for(int s=0;s<(1<<n);s++){
		for(int i=0;i<n;i++){
			if(s>>i&1)
				for(int j=0;j<n;j++){
					if((s>>j&1)==0){
						f[s|(1<<j)][j]=min(f[s][i]+dis(i,j),f[s][i]);
					}
				}
		}
	}
	double ans=oo;
	for(int i=0;i<n;i++){
		ans=min(ans,f[(1<<n)-1][i]);
	}
	printf("%.2lf",ans);
	return 0;
}
2025/1/25 18:16
加载中...