博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【NOIp2002】矩形覆盖
阅读量:4653 次
发布时间:2019-06-09

本文共 2269 字,大约阅读时间需要 7 分钟。

数据范围很小,考虑搜索。

我最先想到的是枚举矩形,显然每个矩形的定点必然是输入中给出的点。

然而不仅复杂度不对,还贼难写。

冷静分析一下,不能枚举矩形包括哪个点,可以枚举点属于哪个矩形。

这样每个点有四种情况,复杂度O(n4),还有check的常数,可以说在TLE的边缘疯狂试探。

实际上,这么多情况是跑不满的,再加一些剪枝,就可以过了。

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 8 inline int read(){ 9 int x=0;char ch=getchar();10 while(ch<'0'||ch>'9')ch=getchar();11 while(ch>='0'&&ch<='9'){12 x=x*10+ch-'0';ch=getchar();13 }14 return x;15 }16 17 const int N=55;18 19 struct poi{20 int x,y;21 }p[N];22 23 struct mtrx{24 int l,r,u,d;25 bool fl;26 }m[5];27 28 29 int n,k;30 31 int ans=1e9+7;32 33 inline bool ins(int a,int x,int y){34 if(x<=m[a].r&&x>=m[a].l&&y<=m[a].u&&y>=m[a].d)return true;35 return false;36 }//判断(x,y)是否在a矩形中 37 38 inline bool check(int a,int b){39 if(ins(a,m[b].l,m[b].u))return true;40 if(ins(a,m[b].l,m[b].d))return true;41 if(ins(a,m[b].r,m[b].u))return true;42 if(ins(a,m[b].r,m[b].d))return true;43 return false;44 }//判断a,b矩形是否相交 45 46 inline void dfs(int now){47 int val=0;48 for(int i=1;i<=k;++i){49 if(m[i].fl){50 for(int j=i+1;j<=k;++j){51 if(m[j].fl&&check(i,j))return ;//如果和另一个矩形相交 52 }53 }54 val+=(m[i].r-m[i].l)*(m[i].u-m[i].d);55 }//先求一波当下的答案 56 if(val>ans)return;57 if(now==n+1){58 ans=min(ans,val);59 return;60 }61 for(int i=1;i<=k;++i){62 mtrx shep=m[i];//用于恢复状态 63 if(!m[i].fl){ 64 m[i].l=m[i].r=p[now].x;65 m[i].u=m[i].d=p[now].y;66 m[i].fl=1;67 dfs(now+1);68 m[i]=shep;69 break;70 }//这里break是因为,放到空矩形肯定比其他矩形不劣。 71 else{72 m[i].l=min(m[i].l,p[now].x);73 m[i].r=max(m[i].r,p[now].x);74 m[i].d=min(m[i].d,p[now].y);75 m[i].u=max(m[i].u,p[now].y);76 dfs(now+1);77 m[i]=shep;78 }79 }80 }81 82 int main(){83 n=read();k=read();84 for(int i=1;i<=n;++i){85 p[i].x=read();p[i].y=read();86 }87 dfs(1);88 cout<

 

转载于:https://www.cnblogs.com/chiyo/p/11230978.html

你可能感兴趣的文章
18 Surprises From Reading jQuery’s Source Code
查看>>
004 方法反射
查看>>
根据 url 下载图片到本地
查看>>
node vue 开发环境部署时,外部访问页面出现: Invalid Host header 服务器域名访问出现的问题...
查看>>
逻辑运算符——逻辑与&&、逻辑或||
查看>>
系统管理-网络管理
查看>>
memmove和memcpy
查看>>
MongoDB整合Spring 详细讲解(含代码) .
查看>>
Java基础之IO
查看>>
asp.net中的App_GlobalResources和App_LocalResources使用
查看>>
集合类
查看>>
多列转1列 SqlServer 实现oracle10g的 wmsys.wm_concat()--for xml path('')
查看>>
Entity Framework应用:使用Code First模式管理视图
查看>>
【机器学习】贝叶斯公式
查看>>
445端口打开方法
查看>>
生成器
查看>>
Pycharm 创建 Django admin 用户名和密码
查看>>
python2.6升级2.7导致yum无法使用 No module named yum
查看>>
maintenance.go
查看>>
【转载】NativeSQL实例
查看>>