从给定的整数列表中创建两个具有相等和的子列表,并最大化此总和

时间:2017-11-26 02:24:18

标签: algorithm dynamic-programming brute-force subset-sum np-hard

您将获得正整数列表S.您将创建两个子列表S1和S2,从S中获取元素,例如

  1. S1的总和等于S2的总和
  2. 最大化此总和并将其输出
  3. 无需将S的所有元素都放入S1或S2中,可以忽略任意数量的S元素。
  4. 例如:如果S = [2,6,5,1,2,5]则答案为10,(S1 = [6,2,2],S2 = [5,5],忽略1 )

    约束:

    (i)如果N是S的长度,则1 <= N <= 50

    (ii)如果MAX是S的最大元素,则1 <= MAX <= 1000

    (iii)如果SUM是S的总和,则1 <= SUM <= 1000

    我只能在蛮力方法之下思考:

    为1&lt; = SUM&lt; = 1000,我们的答案可以在0到500之间。

    因此,对于S的每个子集(SUB),我找到SUB的和(SUBSUM)并检查是否可以使用子集和算法从列表S-SUB获得SUBSUM。我正在返回最大的SUBSUM。所以我的时间复杂度是O(N *(SUM / 2)* 2 ^ N)

    有更快的方法吗?

    任何DP方法?

0 个答案:

没有答案