寻找最大可能的整数总和/乘积组合

时间:2018-09-26 07:35:37

标签: algorithm

给出一个始终以1开头的N个整数列表的输入,例如:1、4、2、3、5和一些目标整数T。

按顺序处理列表,算法决定是将数字乘以当前分数还是将其乘以实现最大可能的输出

例如:[输入] 1、4、2、3、5 T = 40

1 + 4 = 5
5 * 2 = 10
10 * 3 = 30
30 + 5 = 35 which is < 40, so valid.

但是

1 * 4 = 4
4 * 2 = 8
8 * 3 = 24
24 * 5 = 120 which is > 40, so invalid.

我很难在算法中将其概念化-我只是在寻找有关如何思考它或最多使用伪代码的建议。我将如何编码呢?

我的第一个直觉是将+ / *视为1/0,然后测试排列,例如0000(我认为长度== N-1),然后是0001,然后是0011,然后是0111,然后是1111,然后是1000,依此类推

但是我不知道在给定一般N个整数的情况下如何将其放入伪代码中。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

您可以使用递归来实现排列。下面的Python代码:

MINIMUM = -2147483648
def solve(input, T, index, temp):
    # if negative value exists in input, remove below two lines
    if temp >= T:
        return MINIMUM
    if index == len(input):
        return temp

    ans0 = solve(input, T, index + 1, temp + input[index])
    ans1 = solve(input, T, index + 1, temp * input[index])
    return max(ans0, ans1)

print(solve([1, 4, 2, 3, 5], 40, 1, 1))

但是这种方法需要O(2 ^ n)的时间复杂度。