我有一组区间,每个区间都有一个成本。例如:
[(0, 4, 10), (2, 6, 5), (5, 7, 2), (8, 10, 2), (5, 10, 10)]
我想知道是否存在一组区间子集,能够准确地覆盖整数1…10(例如),且彼此之间不重叠,并且总成本低于给定值 c 。 覆盖的成本是覆盖中各个区间成本的乘积。
在这种情况下,我们可以使用[(0,4,10), (5,10,10)]来精确覆盖该间隔,其成本为 10 * 10 = 100
。或者我们可以使用[(0,4,10),(5,7,2),(8,10,2)]来覆盖该间隔,其成本为 10 * 2 * 2 = 40
。
因此,如果我们将成本设置为 c = 50
,则答案将为YES,如果我们将 c = 30
,则答案将为NO。
有没有有效的方法来解决这个问题?
我在想是否有某种变体的加权区间调度 可以解决,但我看不出如何进行所需的修改。主要问题是,这里我们只关心覆盖整个区间且没有重叠的覆盖,并且我们想要使这些覆盖的成本最小化。
E
是区间的数量。你必须扫描它们以了解它们是什么,因此复杂度无法降低到O(E)
以下。 - btilly