50分re求调 本地可过
  • 板块P1433 吃奶酪
  • 楼主1nes
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/11/28 17:18
  • 上次更新2024/11/28 19:54:20
查看原帖
50分re求调 本地可过
1114867
1nes楼主2024/11/28 17:18
#include<bits/stdc++.h>
using namespace std;
const int N = 20;
int n;
struct node{
	double x , y;
	double operator - (const node B)	const{
		return sqrt((x - B.x) * (x - B.x) + (y - B.y) * (y - B.y));
	}
}a[18];
double f[34000][18];

int main(){
	cin >> n;
	for(int i = 0 ; i <= (1 << n) ; i++){
		for(int j = 1 ; j <= n ; j++){
			f[i][j] = 1e4 + 3;
		}
	}
	for(int i = 1 ; i <= n ; i++){
		cin >> a[i].x >> a[i].y;
	}
	for(int i = 1 ; i <= n ; i++){
		f[1 << (i - 1)][i] = a[i] - a[0];
	}
	for(int i = 1 ; i <= (1 << n) ; i++){
		for(int j = 1 ; j <= n ; j++){
			if(!(i && (1 << (j - 1))))	continue;
			for(int k = 1 ; k <= n ; k++){
				if(j == k)	continue;
				if(!(i & (1 << (k - 1))))	continue;
				f[i][j] = min(f[i][j] , f[i - (1 << (j - 1))][k] + (a[j] - a[k]));
			}
		}
	}
	double ans = 1e5 + 7;
	for(int i = 1 ; i <= n ; i++){
		ans = min(ans , f[(1 << n) - 1][i]);
	}
	printf("%.2f" , ans);
	return 0;
}
2024/11/28 17:18
加载中...