七夕鹊桥分析

原题

有n对喜鹊。每一对可以表示为(x,y),x、y是喜鹊的编号,并且任意一对,x总是小于y。(c,d)可以连接在(a,b)之后,当且仅当b< c 。多对喜鹊连接在一起,就构建成了鹊桥。给定n对喜鹊,请你构建最长的鹊桥,来帮助有情人相会。

分析

首先,要理解这个题目的意思。具体例子说明,给定下面的例子:

(15,40)  (5,8)  (1,10)  (30,31)  (34,35)  (9,20)  (36,37)  (2,4)

其中,(2,4)和(5,8)能够连接起来,(5,8)和(9,20)能够连接起来,则它们可以都连接起来,为(2,4)(5,8)(9,20)。这一段鹊桥,长度为3。依次类推,还有其他的情况。

然后,理解了题意,该如何解决呢?假设(a,b)(c,d)(e,f)是可以连接起来的三对喜鹊。则它们的关系如下: b < c,d< e,有根据a< b,c< d,e< f。得到,a< b< c< d< e< f,即b< d< f(a< c< e出发考虑,也是一样的。)我们可以想象,以每一对喜鹊的第二只编号为基准,进行排序,最终的结果,可以通过如下列表产生。

(2,4)  (5,8)  (1,10)  (9,20)  (30,31)  (34,35)  (36,37)  (15,40)

怎么找到最长的鹊桥呢?其实就是在上表中,找到最长递增子序列,只不过,在比较连个喜鹊对(a,b)(c,d)的时候,是b和c进行比较即可。这个时间复杂度是O(n^2)的。

可否在从方法的角度,进一步考虑呢?

大家思考一个问题,最长的鹊桥,是否会包括第一对喜鹊。我们假设,不包括第一对喜鹊。最长的鹊桥为s1,s2…sk。每一个si,可以表示为(xi,yi)。s0,(x0,y0)为第一对喜鹊。我们有y1 < x2, 并且 y0 < y1。y0last y 则保留,否则抛弃,最终留下来的,就是最长的鹊桥。如上面的例子,得到

(2,4)  (5,8)  (9,20)  (30,31)  (34,35)  (36,37)

长度为6。

后面这个思路,不够严谨,没有阐述严格的证明,但是存在的。留给大家思考吧。

为了美好的爱情,大家都尽力了么?

【分析完毕】

转载于:https://www.cnblogs.com/downtjs/p/3534949.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值