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;
}