bro懂我的80分
查看原帖
bro懂我的80分
1455258
darksea楼主2025/8/29 20:05

WA#3,求条
悬关

#include <bits/stdc++.h>
using namespace std;
int n,k;
struct Point{
	int x,y;
}p[55];
struct Node{
	int min_x, max_x, min_y, max_y;
	bool empty;
	Node(){
		min_x = min_y = INT_MAX;
		max_x = max_y = INT_MIN;
		empty = true;
	}
	bool is_empty(){
		return empty;
	}
	int Mianji(){
		if (empty) return 0;
		return (max_x-min_x)*(max_y-min_y);
	}
	void add(const Point& pt){
		if (empty) {
			min_x = max_x = pt.x;
			min_y = max_y = pt.y;
			empty = false;
		} else {
			min_x = min(min_x, pt.x);
			max_x = max(max_x, pt.x);
			min_y = min(min_y, pt.y);
			max_y = max(max_y, pt.y);
		}
	}
}a[5];
int ans=INT_MAX;
void dfs(int depth, int answer){
	if(answer>=ans) return;
	if(depth == n) {
		ans = answer;
		return;
	}
	int tmp=0;
	for(int i = 1; i <= k; i++){
		if(a[i].is_empty()) tmp++;
	}
	if(n-depth<tmp) return;
	for(int i = 1; i <= k; i++){
    	if(a[i].is_empty()) {
			bool flag = false;
			for(int j = 1; j < i; j++) {
				if(a[j].is_empty()) {flag = true;break;}
			}
			if(flag) continue;
		}
		Node darksea=a[i];
		int old=a[i].Mianji();
		a[i].add(p[depth+1]);
		int tmpp=a[i].Mianji();
		int neww = tmpp - old;
		dfs(depth+1,answer+neww);
		a[i]=darksea;
	}
}
int main() {
	cin>>n>>k;
	for(int i = 1; i <= n; i++)
		cin>>p[i].x>>p[i].y;
	for(int i = 1; i <= k; i++)
		a[i]=Node();
	dfs(0,0);
	cout<<ans;
	return 0;
}
2025/8/29 20:05
加载中...