给出一个始终以1开头的N个整数列表的输入,例如:1、4、2、3、5和一些目标整数T。
按顺序处理列表,算法决定是将数字乘以当前分数还是将其乘以实现最大可能的输出 例如:[输入] 1、4、2、3、5 T = 40 但是 我很难在算法中将其概念化-我只是在寻找有关如何思考它或最多使用伪代码的建议。我将如何编码呢? 我的第一个直觉是将+ / *视为1/0,然后测试排列,例如0000(我认为长度== N-1),然后是0001,然后是0011,然后是0111,然后是1111,然后是1000,依此类推 但是我不知道在给定一般N个整数的情况下如何将其放入伪代码中。任何帮助将不胜感激。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.
答案 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)的时间复杂度。