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