我有一个朋友,他告诉我这个问题:(我不知道这是否是他的功课,如果这很重要,无论如何我不要求代码或其他东西)从算法来讲,怎么能有人得到最多的数字在[1,N]中(在有效时间内)并且同时避免它们的组合(给定组合的数量,以及每个组合中的数字的数量)。例如,如果我们有[1,10]和限制(1,10),(9)我们只删除(1或10)和9。
首先,它是否是动态编程问题?我很困惑。
我会尝试根据它们包含的数字按递增顺序对组合进行排序,然后开始删除它们。在我们的示例中,我将首先删除9(以及包含9的所有限制)等。
你有什么想法?如果我没有充分利用某些东西,请告诉我。
答案 0 :(得分:1)
这个问题是NP难的,这意味着可能没有有效的解决方案。
您可以通过证明问题的有效解决方案能够有效地解决已知的NP完全问题(如最小顶点覆盖问题)来证明NP-硬度。我们就是这样做的。采取任意图表。将每个边缘转换为您不希望集合中的两个顶点的限制。解决你的问题。你得到的答案的补充是最小顶点覆盖问题的解决方案。