社区讨论

90TLE求解,急速!!!!!

P1433吃奶酪参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mm8vbls2
此快照首次捕获于
2026/03/02 15:39
上周
此快照最后确认于
2026/03/05 17:50
5 天前
查看原帖

代码1:

CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
double x[16],y[16];
double ans;
int a[18];
bool v[18];
double cal(int i,int j){
	return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
void dfs(int i,double d){
	if(d>=ans){
		return;
	}
	if(i>n){
		ans=min(ans,d);
		return;
	}
	for(int j=1;j<=n;j++){
		if(v[j]==false){
			a[i]=j;
			v[j]=true;
			dfs(i+1,d+cal(a[i-1],j));
			v[j]=false;
		}
	}
}
int main(){
   ios::sync_with_stdio(false);
   cin.tie(0);//等价于cin.tie(false);
   cin>>n;
   for(int i=1;i<=n;i++){
   		cin>>x[i]>>y[i];
   }
   ans=1e18;
   dfs(1,0);
   cout<<fixed<<setprecision(2)<<ans;
	return 0;
}

代码2:

CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
double x[16],y[16];
double ans;
int a[18];
bool v[18];
double cal(int i,int j){
	return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
void dfs(int i,double d){
	if(i>n){
		ans=min(ans,d);
		return;
	}
	for(int j=1;j<=n;j++){
		if(v[j]==false){
			a[i]=j;
			v[j]=true;
			dfs(i+1,d+cal(a[i-1],j));
			v[j]=false;
		}
	}
}
int main(){
   ios::sync_with_stdio(false);
   cin.tie(0);//等价于cin.tie(false);
   cin>>n;
   for(int i=1;i<=n;i++){
   		cin>>x[i]>>y[i];
   }
   ans=1e18;
   dfs(1,0);
   cout<<fixed<<setprecision(2)<<ans;
	return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...