90求助!为什么wa了一个点
查看原帖
90求助!为什么wa了一个点
370121
Zlylovecoding楼主2021/8/19 21:26
#include<bits/stdc++.h>
#define FOR(i,l,r) for(int i=l;i<=r;i++)
typedef long long int LL;
using namespace std; 
const int maxn=30;
const double inf=600;
struct u{
	double x,y;
}A[maxn];
int n;
double dp[18][(1<<18)];

double dis(int a ,int b){
	return sqrt( (A[a].x-A[b].x)*(A[a].x-A[b].x)+(A[a].y-A[b].y)*(A[a].y-A[b].y) );
}

int main(){
	cin>>n;
	FOR(i,1,n){
		scanf("%lf%lf",&A[i].x,&A[i].y);
	}
	memset(dp,inf,sizeof(dp));
	for(int s=1;s<=(1<<n)-1;s++){
		for(int i=1;i<=n;i++){
			if(s&(1<<(i-1))==0) continue;
			if(s==(1<<(i-1))){dp[i][s]=0;continue;}
			for(int j=1;j<=n;j++){
				if(i==j || s&(1<<(j-1))==0 )continue;
				dp[i][s]=min(dp[i][s],dp[j][s-(1<<(i-1))]+dis(i,j));
			}
		}
	}
	double ans=inf; int s=(1<<n)-1;
	for(int i=1;i<=n;i++){
		double tp=dis(i,0);
		ans=min(ans,tp+dp[i][s]);
		
	}
	printf("%.2lf",ans);
	return 0;
}

思路参考题解第一篇,就差照抄一遍了为什么wa了一个点

2021/8/19 21:26
加载中...