zoukankan      html  css  js  c++  java
  • 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块开始,重新计算,最终处理完一遍数据后,就得到从左到右的最大值

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

  • 相关阅读:
    【ARTS】打卡第七周
    【ARTS】打卡第六周
    【ARTS】打卡第五周
    【leetcode】 438. Find All Anagrams in a String
    【ARTS】打卡第四周
    【ARTS】打卡第三周
    【leetcode】 11. Container With Most Water
    【ARTS】打卡第二周
    【ARTS】打卡第一周
    深度VS广度——谈谈对测试职业的一些思考
  • 原文地址:https://www.cnblogs.com/ahmasoi/p/2751928.html
Copyright © 2011-2022 走看看