【发布时间】:2013-06-05 09:33:03
【问题描述】:
我不太确定如何问这个问题,但我会尽量具体。 想象一个俄罗斯方块屏幕,只有不同形状的矩形,落到底部。 我想计算我可以在没有任何重叠的情况下一个相邻的矩形的最大数量。我在标题中将它们命名为线条,因为我实际上只对计算时矩形的长度感兴趣,或者与它下降的 x 轴平行的线。
所以基本上我有一个自定义类型,它有一个开始和结束,都是 0 到 100 之间的整数。假设我们有一个从 1 到 n 的矩形列表。 rectangle_n.start (除非它是最接近原点的矩形)必须 > rectangle_(n-1).end 以便它们永远不会重叠。 我正在从带有随机数的文件中读取矩形坐标(都是 x 轴坐标)。
例如: 考虑这个矩形类型对象列表
rectangle_list {start, end} = {{1,2}, {3,5}, {4,7} {9,12}}
我们可以观察到第三个对象的起始坐标为 4
我不确定是否有此类问题的类型,所以我不知道如何命名它。我对一种可以应用于此类对象列表并会相应地对它们进行排序的算法感兴趣。
我用 c++ 标记了它,因为我正在编写的代码是 c++,但任何语言都可以用于算法。
【问题讨论】:
-
我认为你需要一个启发式的方法。为什么不先从最小的部分开始呢?
-
要明确一点,删除第二个或第三个矩形并不重要,因为它是要最大化的矩形数量,而不是总长度的总和?
-
您的意思是:“我们可以观察到第三个对象的起始坐标为 4 5。”?
-
@Tom 是的,就是这样。问题是,我需要根据多种因素来决定删除哪个:它们中的任何一个是否会影响其他矩形的放置?哪个更长?等
-
@John 是的,谢谢。我已经编辑过了