1. 程式人生 > >浙大資料結構-作業

浙大資料結構-作業

第一章:基本概念

最大子列和問題

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]))