最后三个TLE
查看原帖
最后三个TLE
677127
xiaoxiaoxia楼主2022/8/25 13:32
#include<bits/stdc++.h>
using namespace std;
double ans = 10000000;
double now;
int n;
bool vis[20];
double x[20], y[20];
double f[20][20];
void dfs(int k, int d)
{
    if (now >= ans)
    {
    	return;
	}
    if (k == n)
	{
		ans = min(ans, now); 
		return; 
	}
    for (int i = 1; i <= n;++i)
    if (!vis[i])
	{
        if (f[d][i]!=0)
		{
            vis[i] = 1;
            now += f[d][i]; 
			dfs(k + 1, i);
			now -= f[d][i];
            vis[i] = 0;
        }
        else
		{
            vis[i] = 1;
            f[i][d] = f[d][i] = sqrt((x[i] - x[d])*(x[i] - x[d]) + (y[i] - y[d])*(y[i] - y[d]));
            now += f[i][d];
			dfs(k + 1, i); 
			now -= f[i][d];
            vis[i] = 0;
        }
    }
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
	{
		cin>>x[i]>>y[i];
	}
    vis[0]=1;
    dfs(0,0);
    printf("%.2lf\n",ans);
    return 0;
}
2022/8/25 13:32
加载中...