本地和答案一样,洛谷全re
  • 板块P1433 吃奶酪
  • 楼主May_Cry_
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/7/18 15:31
  • 上次更新2023/11/3 09:07:08
查看原帖
本地和答案一样,洛谷全re
727173
May_Cry_楼主2023/7/18 15:31
#include <bits/stdc++.h>

using namespace std;
const int N = 201;
int n;
double f[1 << 17][21] ,x[N] ,y[N] ,a[N][N] ,ans = 1e9;  
double dsert(double x ,double y ,double fx ,double fy){
	return sqrt((fx - x) * (fx - x) + (fy - y) * (fy - y));
}
int main(){
    memset(f ,127 ,sizeof f);
	cin >> n;
	x[0] = y[0] = 0;
	for(int i = 1;i <= n;i ++){
		cin >> x[i] >> y[i];
	}
	for(int i = 0;i <= n;i ++){
		for(int j = 0;j <= n;j ++){
			a[i][j] = dsert(x[i] ,y[i] ,x[j] ,y[j]);
//			cout << a[i][j] << " ";
		}
	}
	for(int i = 1;i <= n;i ++){
		f[1 << (i - 1)][i] = a[0][i];
	}
	for(int k = 1;k < (1 << n);k ++){
		for(int i = 0;i <= n;i ++){
			if(k & (1 << (i - 1)) == 0) continue;
			for(int j = 0;j <= n;j ++){
				if(i == j || !(k & (1 << (j - 1)))) continue;
				f[k][i] = min(f[k][i] ,f[k - (1 << (i - 1))][j] + a[j][i]);
//				cerr << f[k][i] << '\n';
			}
		}
	}
	for(int i = 1;i <= n;i ++)ans = min(ans ,f[(1 << n) - 1][i]);
	printf("%.2lf" ,ans);
}
2023/7/18 15:31
加载中...