poj2008【优先队列】哞大学之校的队选拔.ppt

poj2008【优先队列】哞大学之校的队选拔.ppt

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

哞大学之校队选拔(POJ2008) Starry * 1 Problem   今年,有N(=1000)头小牛竞争加入校体操队。每头牛的身高为H,重量为W(0H,W100000)。   要求从这些牛中选最多的牛组成集合,并且集合要满足下列条件:    A*(H-h) + B*(W-w) = C   h,w指的是这选择的牛中的H的最小值、W的最小值。   计算出最大队伍中牛的数量。 2 Analysis 从上面的公式可以看出,其实A,B是常数我们可以直接乘到原来H,W里面 公式就变成了(H-h)+(W-w)=C (H+W)-(h+w)=C 对于某个固定的牛H+W是一定的。如果我们选定了h,w那么H+W的值只要按升序排列,取前面最小的几个满足条件的就行了。 我们可以先按照H从大到小排序。然后从前往后枚举H的最小值。然后把当前的所有牛再按照W从大到小排序。 到这里的复杂度是nlogn+n*n 2 Analysis 接下来,我们枚举W的最小值。 维护两个堆,一个最大堆,一个最小堆。最大堆放已经选择的,最小堆放可以选择的。 然后依次把H+W插入最小堆中 因为这个时候W是慢慢变小的,所以当一个新的H+W来的时候,可能W的最小值变小,最大堆中的某些元素是不合要求的,要退出。 然后再从最小堆中查一些能放入的。 这样的算法复杂度是n*n*logn 2 Analysis 此题很快可以得到一个O(N2logN)的算法,通过对每个点经过以直角边的斜率为斜率的直线的截距排序,再使用树状数组统计。 2 Analysis 这道题O(N2)的算法非常有创意!除了之前想到的通过对每个点经过以直角边的斜率为斜率的直线的截距排序,我们在继续通过Y轴排序,然后我们再加入对Y轴排好了序的满足条件的点,通过截距排序的退出不符合的点,由此维护一个满足的点的集合来更新答案就OK了! 2 Analysis 我们是要找到这样的点集,hi=h,wi=w,A*(hi-h) + B*(wi-w) = C。 根据线性规划知识 hi=(-B/A)wi+(C/A) w=0 = h=C/A h=0 = w=C/B 这些点都在一个直角三角形内,两条直角边长度为cw=C/A,ch=C/B。 。 h w (w,h) C/A C/B 2 Analysis 于是 我们的问题转化为用这样一个三角形最多能框住多少点,且根据题意w,h为点集坐标最小值,即三角形两条直角边上都要有点。 2 Analysis 求出经过一个点的所有可能存在的三角形。 其实也就是在该点下方的灰色区域中选择点来确定一个三角形。 2 Analysis 求出经过一个点的所有可能存在的三角形中,最多包含的点数。 求一个三角形内的点数,可以分解为一个矩形内的点数减去一个梯形内的点数。 2 Analysis 用这个方法,求出最上面那个三角形的点数之后。可以继续递推得到下面其他三角形的点数。 2 Analysis 如果点按照高度排序以后,那么后面矩形里的点一定是后出现的。这样就可以做到随时增加矩形。 2 Analysis 但是减去梯形这个操作,就难理解一点,把点按照A*H + B*W来排序,就能保证后面梯形里的点一定是后出现的。 直线:A*(H-h) + B*(W-w)-C = 0。 根据点到直线的距离公式: d=|A*(H-h)+B*(W-w)+C|/√A2+B2 把点按照A*H + B*W来排序,就能保证后面梯形里的点一定是后出现的。 h w (w,h) C/A C/B 2 Analysis 那我们就可以首先求出第一个三角形的点数,然后接下来的三角形就根据减去梯形,和增加矩形的操作,来做小的调整就可以了。 在代码里面的表现形式就是维护两个指针,不断向后移,中间剔除横坐标不在范围之内的点。 这个操作的复杂度是O(N)。 对所有点执行一次,故算法的复杂度是O(N^2)。 谢谢观看

文档评论(0)

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

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

1亿VIP精品文档

相关文档