c++请问为什么算出来结果不对呢
  • 板块P1433 吃奶酪
  • 楼主85LP
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/4/8 22:08
  • 上次更新2023/10/28 04:14:41
查看原帖
c++请问为什么算出来结果不对呢
459428
85LP楼主2022/4/8 22:08
#include <bits/stdc++.h>
using namespace std;
double x[20],y[20],f[4000][20];
double dis(int a,int b) {
	return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));
	}

int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>x[i]>>y[i];
	}
	memset(f,127,sizeof(f));
	for(int s=1;s<=(1<<n)-1;s++){
		for(int i=1;i<=n;i++){
			//if((s>>(i-1))&1==0) 
			 if((s&(1<<(i-1)))==0)
				continue;
			if(s==(1<<(i-1))) {
				f[i][s]=0;
				continue;
			}
			for(int j=1;j<=n;j++){
				if(s&(i<<(j-1))==0||i==j) 
					continue;
				f[i][s]=min(f[i][s],f[j][s-(1<<(i-1))]+dis(i,j));
			}
		}
	}
	double ans=-1;
	for(int i=1;i<=n;i++){
		double s=f[i][(1<<n)-1]+dis(0,i);
		if(ans==-1||ans>s) 
			ans=s;
	}
	printf("%0.2lf\n",ans);
	return 0;
	
}
2022/4/8 22:08
加载中...