求助,p1034 80分求调
查看原帖
求助,p1034 80分求调
804757
Light_Star_RPmax_AFO楼主2023/2/1 08:08
#include <bits/stdc++.h>
using namespace std;
int n,k,ans=INT_MAX,sum;
struct ju{
	int x1,y1,x2,y2;
	bool use;
}b[6];
struct ju1{
	int x,y;
}a[51];
int S(ju x){
	if(!x.use)return 0;
	else return (x.x2-x.x1)*(x.y1-x.y2);
}
void maxx(int x,int y,ju &k){
	if(!k.use){
		k.x1=k.x2=x;
		k.y1=k.y2=y;
		k.use=1;
	}else{
    
		if(x<k.x1)k.x1=x;
		else if(x>k.x2)k.x2=x;
		if(y>k.y1)k.y1=y;
		else if(y<k.y2)k.y2=y;
	}
}
bool ko(int x,int y,ju k){
	return k.x1<=x&&x<=k.x2&&k.y2<=y&&y<=k.y1;
}
bool K(ju x,ju y){
	if(!x.use||!y.use)return 0;
	return ko(y.x1,y.y1,x)||ko(y.x2,y.y2,x)||ko(y.x1,y.y2,x)||ko(y.x2,y.y1,x);
}
bool ok(){
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			if(K(b[i],b[j]))return 0;
		}
	}
    return 1;
}
void DFS(int t,int s){
	if(s>=ans)return ;
	if(t==n){
		if(ok())
			if(s<ans)ans=s;
		return;
	}
    ju q;
	for(int i=1;i<=k;i++){
    
		q=b[i];
		maxx(a[t].x,a[t].y,b[i]);
		DFS(t+1,s-S(q)+S(b[i]));
		b[i]=q;
	} 

}
int main(){
	cin>>n>>k;
	for(int i=0;i<n;i++){
		cin>>a[i].x>>a[i].y;
	}
	DFS(0,0);
	cout<<ans;
}
2023/2/1 08:08
加载中...