蒟蒻求条状压DP
查看原帖
蒟蒻求条状压DP
100690
kawaii__yuyu楼主2021/4/29 16:18
#include<bits/stdc++.h>
typedef long long ll;
typedef double db;
#define il inline
using namespace std;
struct cheese{
	db x;
	db y;
}cs[18];
db f[105][100005],ans;
int n;
db dis(int i,int j){return sqrt((cs[i].x-cs[j].x)*(cs[i].x-cs[j].x)+(cs[i].y-cs[j].y)*(cs[i].y-cs[j].y));}
int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	scanf("%d",&n);
	memset(f,127,sizeof(f));
	cs[0].x=cs[0].y=0;
	for(int i=1;i<=n;i++){
		scanf("%lf%lf",&cs[i].x,&cs[i].y);
		f[i][1<<(i-1)]=dis(0,i);
	}
	for(int s=0;s<(1<<n);s++){
		for(int i=1;i<=n;i++){
			if((s&(1<<(i-1)))==0) continue;
			for(int j=1;i<=n;j++){
				if(i==j||(s&(1<<(j-1)))==0) continue;
				f[i][s]=min(f[i][s],f[j][s-(1<<(i-1))]+dis(i,j));
			}
		}
	}
	for(int i=1;i<=n;i++){
		ans=min(ans,f[i][(1<<n)-1]);
	}
	printf("%.2lf",ans);
	return 0;
}

2021/4/29 16:18
加载中...