JDOJ 2982 最大連續子段和問題

2022-03-20 06:09:46 字數 973 閱讀 2558

洛谷傳送門

jdoj傳送門

給出一段序列,選出其中連續且非空的一段使得這段和最大。

第一行是乙個正整數nn,表示了序列的長度。

第二行包含nn個絕對值不大於1000010000的整數a_ia**i,描述了這段序列。

乙個整數,為最大的子段和是多少。子段的最小長度為11。

輸入 #1複製

輸出 #1複製

【樣例說明】

2,-4,3,-1,2,-4,32,−4,3,−1,2,−4,3中,最大的子段和為4,該子段為3,-1,23,−1,2.

【資料規模與約定】

對於40%40%的資料,有n ≤ 2000n≤2000。

對於100%100%的資料,有n ≤ 200000n≤200000。

一道線性動歸的題。

動歸有四大要素:

初值,狀態,轉移和答案。

初值不用寫了。狀態設定為:令dp[i]表示以i結尾的最大的連續子段和。

轉移的話就是:

dp[i]=max(dp[i-1]+a[i],a[i]);
重點在於最後的答案。

我們會發現,有些題目中,dp[n]不一定是答案,為什麼呢?因為我們會發現,如果當乙個dp[i]出現負數的時候,則dp[i+1]會取a[i]作當前的值,然而a[i]的值不一定比前面的連續子段和大。

所以我們需要一邊動歸一邊更新答案。

所以最後得出了ac**:

#includeusing namespace std;

const int inf=-1e9;

int n,ans=inf;

int a[200001];

int dp[200001];

int main()

printf("%d",ans);

return 0;

}

最大連續子段和

最大連續子段和 給定長度為n的整數序列,a 1.n 求 1,n 某個子區間 i,j 使得a i a j 和最大,或者求出最大的這個和。例如 2,11,4,13,5,2 的最大子段和為20,所求子區間為 2,4 窮舉法 3次for迴圈 第1次for迴圈,遍歷陣列所有數字,即確定子段和的首個數字 第2次...

DP 最大連續子段和

最大連續子段和 hdu 1003 1.問題描述 給定一串整數,例如 6 1 5 4 7,求最大連續子段和?2.演算法介紹 此題不能暴力,o n 2 的時間複雜度必然超時。考慮如下演算法 設mi表示前i個整數包含第i個整數的最大連續子段和。sum i,j 表示第i個整數到第j個整數的和,最大連續子段和...

總結 最大連續子段和

給你乙個序列,讓你在其中找一段連續的子串行,使得這個連續的子串行的和是最大的。它實際上有點動態規劃的意思在裡面,設f i 表示以第i個數字作為結尾的連續子串行的和的最大可能值。則 f i max f i 1 a i a i 這裡的 f i 1 a i 實際上表示的就是,讓a i 和以a i 1 結尾...