POJ 2008 Moo University - Team Tryouts 解题报告

最近快把《short coding》看完,其实我只是切里面的题而已,对于真正的short coding却不是很感冒,但也很佩服别人的专研精神,所以只能流水般得把所有题都切完就算完了。

很多题目都没啥难度,但其实挺适合刚入门的ACMer,由浅入深,又有完全的code,还有很清晰的思路,赞一个~

在后期,终于遇上一道我用常规方法总是runtime limit,虽然想照着书上改,但坚信还有更加高效的解法,遇上百度了一下,发现下文的解法实在是高,在此感谢博主的精细讲解和为博主提供源灵感的博主,不过在此也要对博主最后的勉强解释作出勘误,因为这个东东,耗费了我一个下午的时间,感慨自己的思维被人阻塞了,挂起了。。。最后一刻才醍醐灌顶,泪奔~~~

 

题目原意:

题目大意:有N(1 ≤ N ≤ 1,000)头奶牛选手要组一个省队(-_-||| 想省队想疯了是怎么着),每头奶牛有身高H和体重W两个参数。要求若省队里面选手最小的身高是minh,最小的体重是minw,所有的奶牛要满足

 

A*(H - minh) + B*(W - minw) ≤ C

 

求出省队里面最多可以有几名选手。

 

我的解法参考以下博文:

参考原文: POJ 2008 Moo University - Team Tryouts 牛题

 

以下是我认为博主解释不清的东东,附原文:

 

但是减去梯形这个操作,就难理解一点,把点按照A*H + B*W来排序,就能保证后面梯形里的点一定是后出现的。

可见,A*H + B*W 值的大小决定了他们的位置分布。完全可以保证这个顺序。
这种数形结合的方法实在是相当精妙!

 

P.S:其实以上解释有点勉强,个人感觉有些牵强,以下是个人的愚见,如有异议,欢迎拍砖。

 

关于减去梯形的范围,其实在原题目中就有提示了,比如题目是要问A * (H – h) + B * (W – w) <= C,可以变通为 A * H + B * W <= A * h + B * w + C,其中h, w为H, W中最小的值,而H, W我们将其印射到坐标平面上,用博主的原话来说就是下面一句:

首先,要把所有牛放到坐标系上来表示。目的,就是求出包含最多点的直角三角形。

 

也就是说直角三角形包含了H,W的点,而斜边是大于或等于H,W的分界线,由A * H + B * W <= A * h + B * w + C,可以得到即为A * h + B * w + C,所以每次求得h,w就可以求出其斜边的表示,也就确定了下面所说的梯形,减去梯形这个操作,即去掉大于三角形斜边的点即可

 

 

个人建议最好还是看看原博客的解法,然后再回来看我针对的地方对照看一看,应该可以解释得通,如果有任何异议,欢迎拍砖~

 

以上图片均引自原博主,在此再次感谢博主的辛勤劳动。

 



 

posted @ 2011-12-03 11:53  Anbit自由之路  阅读(390)  评论(0编辑  收藏  举报