救救孩子吧
查看原帖
救救孩子吧
351081
万灭、蓝鲸楼主2021/8/17 22:02

题目传送门

80 分,2个WA

#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;

const int INF = 0x7f7f7f7f;
double xx[105], yy[105], ans = INF;
bool vis[1005];
int n;

double dis(double x1, double y1, double x2, double y2)
{
	return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}

void dfs(double x, double y, double sum, int lft)
{
	if (sum >= ans)  return;
	if (lft == 0)
	{
		ans = min(ans, sum);
		return;
	}
	double minn = INF;
	for (int i = 1; i <= n; i++)
		if (!vis[i])
			minn = min(minn, dis(x, y, xx[i], yy[i]));
	for (int i = 1; i <= n; i++)
		if (!vis[i] && dis(x, y, xx[i], yy[i]) == minn)
		{
			vis[i] = 1;
			dfs(xx[i], yy[i], sum + minn, lft - 1);
			vis[i] = 0;
		}
}

int main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
  		scanf("%lf%lf", &xx[i], &yy[i]);
	dfs(0, 0, 0, n);
	printf("%.2lf", ans);
	return 0;
}

2021/8/17 22:02
加载中...