网站大量收购闲置独家精品文档,联系QQ:2885784924

矩形覆盖题解讲述.doc

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
矩形覆盖题解讲述

第四题 矩形覆盖 矩形覆盖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。各个矩形必须完全分开(边线与顶点也都不能重合)。 [输入]:    n k    xl y1    x2 y2    ... ...    xn yn (0=xi,yi=500) [输出]:   一个整数,即满足条件的最小的矩形面积之和。 [输入输出样例] d.in : 4 2  1 1  2 2  3 6  0 7 屏幕显示: 4 分析 【题解一】 1、本题的难度较大。如果你这样认为:即在假定已用i个矩形(面积和满足最小)覆盖所有点的基础上,穷举所有2个矩形合并成1个矩形(条件是:在所有合并方案中使合并后面积最小),从而使矩形个数减少为i-1——那就错了,可是却可以通过前4组测试数据! 正确的做法是对不同的K值分别进行计算,好在K值较小,否则... 讨论: k=1,只要求出n个点坐标的最大、最小值,就可求得矩形的位置与面积; k=2,有2个矩形,它们只有2种分布形式:左右式(flag=0),上下式(flag=1) 对于左右式,显然要先将所有点按横坐标升序排列,可将点1~点i-1放入矩形1中,将点i~点n放入矩形2中,求两矩形的面积之和;如果面积和比上一个值小,记下;让i从2循环到n,就可完成左右式的全部有哪些信誉好的足球投注网站; 对于上下式,先将所有点按纵坐标升序排列,依此类推。 k=3,有3个矩形,它们有6种分布形式: 要用两重循环进行有哪些信誉好的足球投注网站:设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的情形(似乎有意放了一马?)。据说本题全国没有一人全对!(只要求K=1,2,3) 程序清单 {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S-,T-,V+,X+,Y+} {$M 65520,0,655360} program NOIPG4; const maxn=50;maxk=3; type rect=record{定义矩形数据类型} l,r,t,b:word;{矩形的左边,右边,下边,上边距坐标轴的距离} end; vxy=record{定义点数据类型} x,y:word;{点的横、纵坐标} end; var ju:array[1..maxk]of rect; v:array[1..maxn,0..2] of vxy;v0:vxy; n,k,i,j,ii,jj:byte;f:text;filename:string; Smin,temp:longint; function intersect(jui,juj:rect):boolean;{判断两矩形是否有公共点} var b1,b2,t1,t2,l1,l2,r1,r2:word; begin b1:=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=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));

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档