矩形覆盖题解.doc

矩形覆盖题解.doc

ID:50918159

大小:112.01 KB

页数:28页

时间:2020-03-15

矩形覆盖题解.doc_第1页
矩形覆盖题解.doc_第2页
矩形覆盖题解.doc_第3页
矩形覆盖题解.doc_第4页
矩形覆盖题解.doc_第5页
资源描述:

《矩形覆盖题解.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第四题 矩形覆盖矩形覆盖(存盘名NOIPG4)[问题描述]:  在平面上有n个点(n<=50),每个点用一对整数坐标表示。例如:当n=4时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一。  这些点可以用k个矩形(1<=k<=4)全部覆盖,矩形的边平行于坐标轴。当k=2时,可用如图二的两个矩形sl,s2覆盖,s1,s2面积和为4。问题是当n个点坐标和k给出后,怎样才能使得覆盖所有点的k个矩形的面积之和为最小呢。约定:覆盖一个点的矩形面积为0;覆盖平行于坐标轴直线上点的矩形面积也为0。各个矩形必须完全分开(边线与顶点也都不能重合)。[输入]

2、:  键盘输人文件名。文件格式为   nk   xly1   x2y2   ......   xnyn(0<=xi,yi<=500)[输出]:  输出至屏幕。格式为:  一个整数,即满足条件的最小的矩形面积之和。[输入输出样例]d.in: 42 11 22 36 07屏幕显示:4分析【题解一】1、本题的难度较大。如果你这样认为:即在假定已用i个矩形(面积和满足最小)覆盖所有点的基础上,穷举所有2个矩形合并成1个矩形(条件是:在所有合并方案中使合并后面积最小),从而使矩形个数减少为i-1——那就错了,可是却可以通过前4组测试数据!正确的做法是对不同的K值分别进行计算,好在K值较小,否

3、则...讨论:k=1,只要求出n个点坐标的最大、最小值,就可求得矩形的位置与面积;k=2,有2个矩形,它们只有2种分布形式:左右式(flag=0),上下式(flag=1)12flag=021flag=1对于左右式,显然要先将所有点按横坐标升序排列,可将点1~点i-1放入矩形1中,将点i~点n放入矩形2中,求两矩形的面积之和;如果面积和比上一个值小,记下;让i从2循环到n,就可完成左右式的全部搜索;对于上下式,先将所有点按纵坐标升序排列,依此类推。k=3,有3个矩形,它们有6种分布形式:123flag=1123flag=0321flag=2123flag=3123flag=4123f

4、lag=5要用两重循环进行搜索:设i,j为循环变量,将点1~i-1放入矩形1中,点i~j-1放入矩形2中,点j~n放入矩形3中;点必须在放入前排好序(均为升序):对于flag=0,所有点按横坐标排序;对于flag=1,所有点按纵坐标排序;对于flag=2,所有点先按横坐标排序,然后点i~n按纵坐标排序;对于flag=3,所有点先按横坐标排序,然后点1~j-1按纵坐标排序;对于flag=4,所有点先按纵坐标排序,然后点1~j-1按横坐标排序;对于flag=5,所有点先按纵坐标排序,然后点i~n按横坐标排序;至于k=4,4个矩形有22种分布形式,实在太复杂!幸好测试数据中没有K=4的情

5、形(似乎有意放了一马?)。据说本题全国没有一人全对!(只要求K=1,2,3)程序清单{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S-,T-,V+,X+,Y+}{$M65520,0,655360}programNOIPG4;constmaxn=50;maxk=3;typerect=record{定义"矩形"数据类型}l,r,t,b:word;{矩形的左边,右边,下边,上边距坐标轴的距离}end;vxy=record{定义"点"数据类型}x,y:word;{点的横、纵坐标}end;varju:array[1..maxk]ofrect;v:array

6、[1..maxn,0..2]ofvxy;v0:vxy;n,k,i,j,ii,jj:byte;f:text;filename:string;Smin,temp:longint;functionintersect(jui,juj:rect):boolean;{判断两矩形是否有公共点}varb1,b2,t1,t2,l1,l2,r1,r2:word;beginb1:=jui.b;b2:=juj.b;t1:=jui.t;t2:=juj.t;l1:=jui.l;l2:=juj.l;r1:=jui.r;r2:=juj.r;intersect:=((l2<=r1)and(l2>=l1)or(r2<

7、=r1)and(r2>=l1)or(l2<=l1)and(r2>=r1))and((t2<=b1)and(t2>=t1)or(b2<=b1)and(b2>=t1)or(b2>=b1)and(t2<=t1));end;functionarea(ju:rect):longint;{求矩形的面积}vartemp:longint;begintemp:=ju.b-ju.t;area:=temp*(ju.r-ju.l);{不能直接写成area:=(ju.b-ju.t)*(ju.r

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。