90pts WA On #5,12,13 求调
  • 板块P1433 吃奶酪
  • 楼主htdlz
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/5/30 21:16
  • 上次更新2024/5/31 09:30:29
查看原帖
90pts WA On #5,12,13 求调
808466
htdlz楼主2024/5/30 21:16

RT

#include <bits/stdc++.h>

using namespace std;

pair<double, double> site[20];
int N, n;
double f[20][(1 << 15) + 1];

double len(pair<double, double> a, pair<double, double> b) {
	return sqrt((a.first - b.first) * (a.first - b.first) + (a.second - b.second) * (a.second - b.second));
}

int main() {
	cin >> n;	
	N = (1 << n) - 1;
	for (int i = 1; i <= n; i++) cin >> site[i].first >> site[i].second;
	memset(f, 127, sizeof(f));
	double ans = f[0][0];
    for (int i = 1; i <= n; i++) f[i][1 << (i - 1)] = len({0, 0}, site[i]);
	for (int k = 1; k <= N; k++) {
		for (int i = 1; i <= n; i++) {
			if (k & (1 << (i - 1)) == 0) continue;
			for (int j = 1; j <= n; j++) {
				if (i == j || (k & (1 << (j - 1)) == 0)) continue;
				f[i][k] = min(f[i][k], f[j][k - (1 << (i - 1))] + len(site[i], site[j]));
			}
		}
	}
	for (int i = 1; i <= n; i++) ans = min(f[i][N], ans);
	printf("%.2lf\n", ans);
	return 0;
}
2024/5/30 21:16
加载中...