比赛 |
EYOI与SBOI开学欢乐赛8th |
评测结果 |
AAWAATA |
题目名称 |
矩形覆盖 |
最终得分 |
71 |
用户昵称 |
该账号已注销 |
运行时间 |
1.091 s |
代码语言 |
C++ |
内存使用 |
1.64 MiB |
提交时间 |
2022-09-26 21:32:08 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct point{
int x,y;
}p[100];
struct jx{
int x1,y1,x2,y2;
}m[10],ht[10][100];
int n,k,ans=0x3f3f3f3f;
int v[10]={0};
int fa[10]={0};
int add(int id,int x,int y,int u){
ht[id][u].x1=m[id].x1;
ht[id][u].x2=m[id].x2;
ht[id][u].y1=m[id].y1;
ht[id][u].y2=m[id].y2;
m[id].x1=min(m[id].x1,x);
m[id].x2=max(m[id].x2,x);
m[id].y1=min(m[id].y1,y);
m[id].y2=max(m[id].y2,y);
}
int dl(int id,int u){
m[id].x1=ht[id][u].x1;
m[id].x2=ht[id][u].x2;
m[id].y1=ht[id][u].y1;
m[id].y2=ht[id][u].y2;
}
int c(int id){
return (m[id].x2-m[id].x1)*(m[id].y2-m[id].y1);
}
int dfs(int x){
int u=0;
if(x==n+1){
for(int i=1;i<=k;i++){
u+=c(i);
}
ans=min(ans,u);
return 0;
}
for(int i=1;i<=k;i++){
u+=c(i);
}
if(u>=ans)return 0;
for(int i=1;i<=k;i++){
add(i,p[x].x,p[x].y,x);
if(v[i]==0){
m[i].x1=p[x].x;
m[i].y1=p[x].y;
m[i].x2=p[x].x;
m[i].y2=p[x].y;
}
fa[x]=i;
v[i]++;
dfs(x+1);
dl(i,x);
v[i]--;
}
return 0;
}
int main(){
freopen("jxfg.in","r",stdin);
freopen("jxfg.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
}
dfs(1);
cout<<ans<<endl;
return 0;
}