【发布时间】:2014-02-19 00:43:12
【问题描述】:
我想找到一种算法来找到具有交替符号(不一定是连续的)的最大不相交子数组,例如在 (2, -3, 4., 5, -4, 3, -3, 5, - 2, 1) 返回最大和为 7,子数组为 (5,-3,5)
我使用 dp 尝试过这样的事情:
A=[2,-3,4,5,-4,3,-3,5,-2,1]
m = A[0]
flag = A[0] #flag has the same sign of the previously taken element
maximum = m #temporary maxsum
for i in range(1,10):
if A[i]>0 and flag<0 or A[i]<0 and flag>0: #i look only for alternate signs
m = max(m ,A[i]+m)
if m > maximum:
flag = -flag
maximum = m
else:
if A[i]>maximum:
maximum=A[i]
flag=-flag
print(maximum)
它给出了 7 但这只是一个巧合
我是否必须使用另一个嵌套的 For 才能正确比较每个可能的子数组?
【问题讨论】:
-
您能更详细地解释一下为什么应该从您的示例数组中获取 (5,-3,5) 吗?
-
它是按照 A 的索引顺序(但不一定是连续的)选择交替符号元素制成的子数组,它具有最大的总和。抱歉,如果不清楚。
标签: python dynamic-programming arrays