Dominoes Game

【原题链接】

【题意说明】

多米诺骨牌游戏,有N个骨牌,把它们摆在一条直线上,已知它们的位置和高度,骨牌可以向左右两边倒,若它可以碰到附近的骨牌(若它倒下去,只能达到附近骨牌位置时,不算能打倒,即:这里的骨牌是没有厚度的)问:任意推倒一块骨牌,最多能打倒多少张骨牌!

【问题分析】

快排+两遍数据处理

首先,这里的输入由于没有说明是按归位置的顺序输入的,所以需要按照位置的顺序对数据进行排序,这部分就需要用到快排了!

然后呢?以从左到右为例来说明(从右到左也是同样的),假定第i个骨牌的位置和高度为xi、hi。

首先来看第1个骨牌与第2个骨牌的位置与高度关系:

(1)若h1>x2-x1,则表示第1个骨牌能打倒第2块,此时还要接着处理第2块骨牌的情况!是不是第2块骨牌打不到第3块,那第1块就只能打倒1块呢?不一定,还要看第1块能不能打倒第3块呢?也就是说,这里不能仅仅只看h2与x3-x2的大小关系,还需要看h1与x3-x1之间的大小关系!这样处理起来有些麻烦?

我们先看打倒第2块后,相当于把第1块骨牌的高度去掉x2-x1,剩下h1-(x2-x1),让它h2比较,若大于h2,则用h1-(x2-x1)去打第3块,否则就用h2去打第3块!

(2)若h1<=x2-x1,按题意这是打不倒第2块的,所以此时第1块的任务也就结束了,并记录下它的长度!接下来从第2块开始,重新计算,最终处理完一遍数据后,就得到从左到右的最大值

再从右到左处理一遍数据,最终得到最大值!

posted on 2012-11-02 22:00  生活不变心在变  阅读(326)  评论(0编辑  收藏  举报

导航