思路有点混乱
查看原帖
思路有点混乱
377768
Tooler_Yang楼主2022/9/1 19:08

求大佬帮忙改一下

#include<bits/stdc++.h>
#include<math.h>
using namespace std;
struct you{
	int x,y;
}d[7];
int n;
double ans;
bool used[7];
int Map[2001][2001];
int lx,ly,rx,ry;
double dis(int fx,int fy,int ex,int ey){
	return sqrt((fx-ex)*(fx-ex)+(fy-ey)*(fy-ey));
}
double max_cir(int now){
	int nx=d[now].x;
	int ny=d[now].y;
	double min_r=20000;
	for(int i=1;i<=n;i++){
		if(i==now||Map[d[i].x][d[i].y]==0) continue;
		if(dis(nx,ny,d[i].x,d[i].y)-Map[d[i].x][d[i].y]<=0) return 0;
		if(dis(nx,ny,d[i].x,d[i].y)-Map[d[i].x][d[i].y]<min_r&&dis(nx,ny,d[i].x,d[i].y)-Map[d[i].x][d[i].y]>0) min_r=dis(nx,ny,d[i].x,d[i].y)-Map[d[i].x][d[i].y];
	}
	min_r=min(min_r,min(min(min(double(d[now].x-lx),double(rx-d[now].x)),double(d[now].y-ly)),double(ry-d[now].y)));
	return min_r;
}
double S(double r){
	return M_PI*r*r;
}
void dfs(int now,double all){
	if(now==n+1){
		ans=max(ans,all);
	}
	for(int i=now;i<=n;i=-~i){
		if(used[i]) continue;
		double cir_r=max_cir(now);
		all+=S(cir_r);
		Map[d[now].x][d[now].y]=cir_r;
		dfs(now+1,all);
		all-=S(cir_r);
		Map[d[now].x][d[now].y]=0;
	}
}
int main(){
	memset(Map,0,sizeof(Map));
	cin>>n;
	cin>>lx>>ly>>rx>>ry;
	lx+=1000,ly+=1000,rx+=1000,ry+=1000;
	for(int i=1;i<=n;i=-~i){
		cin>>d[i].x>>d[i].y;
		d[i].x+-1000,d[i].y+=1000;
	}
	memset(used,false,sizeof(used));
	ans=0xc0c0c0c0;
	dfs(1,0);
	printf("%.2lf",ans);
	return 0;
}
2022/9/1 19:08
加载中...