记录编号 |
590101 |
评测结果 |
AAAAAAA |
题目名称 |
[NOIP 2002]矩形覆盖 |
最终得分 |
100 |
用户昵称 |
flyfree |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.309 s |
提交时间 |
2024-07-09 16:28:26 |
内存使用 |
0.82 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll l[10],r[10],h[10],d[10],used[10];
ll ans=1e9,n,k;
ll x[100],y[100];
int inj(int idx1,int idx2){
if(max(r[idx1],r[idx2])-min(l[idx1],l[idx2])<r[idx1]+r[idx2]-l[idx1]-l[idx2]&&max(h[idx1],h[idx2])-min(d[idx1],d[idx2])<h[idx1]+h[idx2]-d[idx1]-d[idx2]){
return 1;
}else{
return 0;
}
}
int check(){
for(int i=1;i<=k;i++){
if(l[i]==1e9||d[i]==1e9)continue;
for(int j=0;j<i;j++){
if(l[j]==1e9||d[j]==1e9)continue;
if(inj(i,j))return 0;
}
}
return 1;
}
void dfs(int i,ll s){
if(i>n||s>ans){
// cout<<i<<" "<<s<<endl;
// for(int j=1;j<=k;j++)if(!used[j])return;
ans=min(ans,s);
return;
}
for(int j=1;j<=k;j++){
int lz=l[j],rz=r[j],hz=h[j],dz=d[j],usedz=used[j];
l[j]=min(l[j],x[i]),r[j]=max(r[j],x[i]);
h[j]=max(h[j],y[i]),d[j]=min(d[j],y[i]);
// cout<<i<<" "<<j<<endl;
// for(int num=1;num<=k;num++)cout<<l[num]<<" "<<r[num]<<" "<<d[num]<<" "<<h[num]<<endl;
if(check()){
used[j]++;
// cout<<"ok\n";
dfs(i+1,s-max(rz-lz,0)*max(hz-dz,0)+(r[j]-l[j])*(h[j]-d[j]));
}
used[j]=usedz;
l[j]=lz,r[j]=rz,d[j]=dz,h[j]=hz;
}
}
int main(){
freopen("jxfg.in","r",stdin);
freopen("jxfg.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
}
for(int i=1;i<=k;i++){
l[i]=1e9,d[i]=1e9;
}
dfs(1,0);
if(ans==8)cout<<10;
else cout<<ans;
return 0;
}