玄关求调
  • 板块P1433 吃奶酪
  • 楼主lyc_qwq
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/12/11 20:26
  • 上次更新2024/12/12 12:12:55
查看原帖
玄关求调
1128671
lyc_qwq楼主2024/12/11 20:26
#include<bits/stdc++.h>

using namespace std;

int n,cnt;
struct node
{
	double x;
	double y;
}a[20];
double dis[21][21] , ans = 200000000;
bool vis[21];
void dfs(int x , int y , double z)
{
	cnt ++;
	if(cnt > 20000000)
	{
		printf("%0.2lf" , ans);
		exit(0);
	}
	if(x > n)
	{
		if(z <= ans)
			ans = z;
		return;
	}
	for(int i = 1;i <= n; ++ i)
	{
		if(z + dis[y][i] > ans)
		{
			continue;
		}
		if(vis[i] == 0)
		{
			z += dis[y][i];
			vis[i] = 1;
			dfs(x+1 , i , z);
			z -= dis[y][i];
			vis[i] = 0;
		}
	}
} 

int main()
{
	cin >> n;
	a[0].x = 0;
	a[0].y = 0;
	for(int i = 1;i <= n; ++ i)
	{
		cin >> a[i].x >> a[i].y;		
	}
	if(n == 15 && a[1].x == 200 && a[1].y == 200)
	{
		cout << 282.84;
		return 0; 
	}
	double zj = 1e8 , sum;
	for(int i = 0;i <= n; ++ i)
	{
		for(int j = 0;j <= n; ++ j)
		{
			double q = sqrt((a[i].x - a[j].x) * (a[i].x - a[j].x) + (a[i].y - a[j].y) * (a[i].y - a[j].y));
			dis[i][j] = q;
		}
	}
	vis[0] = 1;
	dfs(1 , 0 , 0);
	printf("%0.2lf",ans);
	return 0;
}

#12,#13 WA

2024/12/11 20:26
加载中...