浙大資料結構-作業
阿新 • • 發佈:2018-12-06
第一章:基本概念
最大子列和問題
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]))