第一章:基本概念
最大子列和问题
n=int(input())
lst=list(map(int,input().split()))
maxSum=0
thisSum=0
for i in range(n):
thisSum+=lst[i]
if thisSum<0:
thisSum=0
if thisSum>maxSum:
maxSum=thisSum
print (maxSum)
最大子列和问题(二)
输出最大子列和,同时要输出对应的子列第一个和最后一个数。
最大和小于0时,输出起始位和末位数。
n = int(input())
A = list(map(int, input().split()))
left = [0] * n # f[i]为A[0]:A[i]的最长子列和对应的起始下标
f = [e for e in A] # f[i]为A[0]:A[i]的最长子列和
maxSum = A[0]
maxLeft = 0
maxRight = n - 1
for i in range(1, n):
if f[i - 1] >= 0:
f[i] = f[i - 1] + A[i]
left[i] = left[i - 1]
else:
left[i] = i
if f[i] > maxSum:
maxLeft = left[i]
maxRight = i
maxSum=f[i]
if maxSum < 0:
print("{} {} {}".format(0, A[0], A[n - 1]))
else:
print("{} {} {}".format(maxSum, A[maxLeft], A[maxRight]))