1034求调
  • 板块灌水区
  • 楼主Jerry_heng
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/3/6 22:39
  • 上次更新2023/10/23 22:49:01
查看原帖
1034求调
763878
Jerry_heng楼主2023/3/6 22:39
#include<bits/stdc++.h>
using namespace std;
int n,k,x[51],y[51],ans=INT_MAX;
struct node{
	int x1,y1,x2,y2;
	bool us;
	bool In(int aa,int bb){
		if(aa>=x1&&bb>=y1&&aa<=x2&&bb<=y2)return 1;
		else return 0;
	}
	void Add(int a,int b){
		if(!us){
			x1=x2=a;
			y1=y2=b;
			us=1;
		}
		else{
			x1=min(x1,a);
			x2=max(x2,a);
			y1=min(y1,b);
			y2=max(y2,b);
		}
	}
}g[5],t;
bool not_cross(node a,node b){
	if(!a.us||!b.us)return 1;
	if(a.In(b.x1,b.y2)||a.In(b.x2,b.y1)||a.In(b.x1,b.y1)||a.In(b.x2,b.y2))return 0;
	if(b.In(a.x1,a.y2)||b.In(a.x2,a.y1)||b.In(a.x1,a.y1)||b.In(a.x2,a.y2))return 0;
	return 1;
}
bool pd(){
	for(int i=1;i<k;i++)
		for(int j=i+1;j<=k;j++)
			if(i!=j&&!not_cross(g[i],g[j]))return 0;
	return 1;	
}
int js(node a){
	if(!a.us)return 0;
	else return (a.x2-a.x1)*(a.y2-a.y1);
}
void dfs(int now,int s){
	for(int i=1;i<=k;i++)
		cout<<i<<" "<<g[i].x1<<" "<<g[i].y1<<" "<<g[i].x2<<" "<<g[i].y2<<endl;
	if(s>=ans)return;
	if(now>n){
		if(pd())ans=min(ans,s);
		return;
	}
	for(int i=1;i<=k;i++){
		t=g[i];
		g[i].Add(x[now],y[now]);
		dfs(now+1,s+js(g[i])-js(t));
		g[i]=t;
	}
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>x[i]>>y[i];
	dfs(1,0);
	cout<<ans;
	return 0;
}
2023/3/6 22:39
加载中...