最大子序列和

最大子序列和問題是計算機科學和算法中的一個經典問題。給定一個序列,找到該序列的一個子序列,其和最大。子序列是指通過刪除一些(可能不刪除)原始序列中的元素得到的序列,並且刪除的元素不需要是連續的。

例如,對於序列[2, 1, -3, 4, -1, 2, 1, -5, 4],其最大子序列和可以通過選擇相鄰的正值得到,即[4, -1, 2, 1],其和為6。這個子序列不是原始序列的連續部分,因為它跳過了-3-5

這個問題可以通過動態規劃來解決。我們可以定義一個數組dp,其中dp[i]表示以a[i]結尾的最大子序列和。我們可以通過以下方式計算這個數組:

我們可以通過遍歷序列來計算這個數組,然後返回dp[n - 1],其中n是序列的長度。

以下是一個簡單的Python實現:

def max_subsequence_sum(arr):
    n = len(arr)
    dp = [0] * n
    dp[0] = arr[0]

    for i in range(1, n):
        if arr[i] > 0:
            dp[i] = arr[i] + dp[i - 1]
        else:
            dp[i] = dp[i - 1]

    return max(dp)

# 示例
arr = [2, 1, -3, 4, -1, 2, 1, -5, 4]
print(max_subsequence_sum(arr))  # 輸出應該是 6

這個算法的時間複雜度和空間複雜度都是O(n),其中n是序列的長度。