【发布时间】:2012-06-02 03:18:02
【问题描述】:
假设给定一组闭区间,其中每个区间的形式为 [l,r]。如果我们想从这个集合中选择两个区间,使得它们的交集的大小乘以它们的并集的大小是最大值。我们能否提供一个非平凡的算法来解决这个问题?
例如,如果我们有四个区间,[1,6]、[4,8]、[2,7]、[3,5]。最佳解决方案是选择[1,6]和[2,7]。答案是 (7-1) * (6-2) = 24。
其实原问题需要我们选择(N>=2)个区间,但我认为我们可以证明最优解只包含两个区间:
如果最优解具有三个或更多区间:
[ ]
[ ]
[ ]
我们可以看到,如果我们删除中间区间,权重不会减少。
【问题讨论】:
-
你看动态编程来解决这个问题了吗?
-
@Nupul 我试过了,但不知道如何使用动态编程来解决这个问题......
-
为什么你认为你只需要 2 个间隔?如果给您
[3,5]、[-100,5]和[3,100],该怎么办?你不会三个都选吗? -
@RayToal 当我们选择所有三个时,它们的交集仅为 [3,5],因此权重为 [3,5] * [3,5] = 4。但是如果我们选择 [- 100, 5] 和 [3, 100] 更好,因为权重是 [-100, 100] * [3, 5] = 400。
-
那我不明白你的问题。如果我选择所有三个,交叉点是
[3,5]。但是这三个的联合是[-100, 100]。您为此拥有的值也是 400。哦,我看到 this 案例为什么两个间隔就足够了。但你确定一般吗?
标签: algorithm