歡迎加入我的 Discord 群組與我討論程式相關的問題!

Posted on 

 by 

 in ,

CSES – Maximum Subarray Sum

評分:2 分,滿分為 5。

題目連結

題意

給 n 個整數,找到最大的連續,非空的總和。(選的元素一定要連續)

解題方法

這題的解法需要用到一點動態規劃 (Dynamic Programming) 的概念,這也是一題非常經典的動態規劃題!

狀態

dp[i] 表示到位置i為止的 maximum subarray sum

轉移

dp[i] = max(a[i], dp[i-1] + a[i])
(選擇 dp[i-1] + a[i]代表從前面已經累積的最佳值加上現在的值,而選擇a[i]代表放棄前面的值從現在這格開始)

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin >> n;
    for(int i = 0;i < n;i++) cin >> a[i];
    long long ans = a[0];
    dp[0] = a[0];
    for(int i = 1;i < n;i++){
        dp[i] = max(a[i], a[i]+dp[i-1]);
        ans = max(ans, dp[i]);
    }
    cout << ans << '\n';
}

在〈CSES – Maximum Subarray Sum〉中有 1 則留言

  1. 2022 年 6 月 APCS 題解 | Coding Prep 程式設計題目題解

    […] 類似題目:Maximum Subarray Sum […]

發表迴響

Blog at WordPress.com.

%d 位部落客按了讚: