"""
最大子段和(Maximum Interval Sum):
给定长度为n的整数序列,a[1…n], 求[1,n]某个子区间[i , j],使得a[i]+…+a[j]和最大.
例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4].
"""
# 穷举法
def maxrange(a):
n = len(a)
Sum = 0.0
start = 0
end = 0
Max = 0.0
for i in range(n):
Sum = 0.0
for j in range(i,n):
Sum = Sum + a[j]
if(Sum>Max):
Max = Sum
start = i + 1
end = j + 1
print(start, end, Max)
# 动态规划
def SetSubSum(array,index):
#获取每个子段和
global sums
if sums[index-1]>=0:
sums[index] = sums[index-1] + array[i]
else:
sums[i]=array[i]
def GetMaxSum(array):
#获取最大子段和
_max = array[0]
for i in range(1,len(array)):
if _max<=array[i]:
_max=array[i]
return _max
if '__name__=__main__':
array = [1,2,-2,3,4]
global sums
sums = [0]*len(array)
for i in range(0,len(array)):
SetSubSum(array,i)
_max = GetMaxSum(sums)
print("Max Sub Sum is:",_max)