最优化剪枝求调
  • 板块P1433 吃奶酪
  • 楼主oiler153
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/10/16 21:38
  • 上次更新2023/10/27 07:11:21
查看原帖
最优化剪枝求调
804759
oiler153楼主2022/10/16 21:38
#include<iostream>
#include<cmath>
using namespace std;
int n;
bool p[100];
double len,zy[1000000];
struct aa{
	double x,y;
}a[100];
int qiu(int o){
	int pp=0;
	for(int i=1;i<=n;i++)
		pp+=(1<<(i-1))*(p[i]||i==o?1:0);
	return pp;
}
double sqrt1(int l,int r){
	double xx=(a[l].x-a[r].x)*(a[l].x-a[r].x);
	double yy=(a[l].y-a[r].y)*(a[l].y-a[r].y);
	return sqrt(xx+yy);
}
void dfs(int k,int j){
	if(k==n){
		return ;
	}
	for(int i=2;i<=n;i++){
		if((p[i]=!1)&&(zy[qiu(i)]==0.0||(zy[qiu(i)]>len+sqrt1(i,j)))){
			p[i]=1;
			cout<<sqrt1(i,j)<<endl;
			len +=sqrt1(i,j);
			zy[qiu(9999)]=len;
			dfs(k+1,i);
			len-=sqrt1(i,j);
			p[i]=0;
		}
	}
}
int main(){
	cin>>n;
	p[1]=1;
	for(int i=1;i<=n;i++){
		cin>>a[i].x>>a[i].y;
	}
	dfs(0,1);
	cout<<zy[(1<<n)-1];
	return 0;
}

orz

2022/10/16 21:38
加载中...