P1115 最大子段和

2021-09-24 20:14:11 字數 1255 閱讀 9671

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

輸入格式:

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

第二行包含nnn個絕對值不大於100001000010000的整數aia_iai​,描述了這段序列。

輸出格式:

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

輸入樣例#1:複製

7

2 -4 3 -1 2 -4 3

輸出樣例#1:複製

4
【樣例說明】

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

【資料規模與約定】

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

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

這個是洛谷部落格的以為大佬的,原封借鑑的。

和第三份**一樣,也是先求maxx再講sum賦值0,無需陣列。乙個個累加,記錄求得。

#includeint n,j,sum,maxx;

int main()

return (printf("%d",maxx))&0;//輸出並return 0

}

用陣列dp乙個個求,大了取大,然後ans遍歷每乙個,故可以省去陣列。

詳情見下。

#include #includeusing namespace std;

int main()

; int ans=-9999999;

cin>>n;

for(int i=1;i<=n;i++)

cout《把陣列去掉,每次輸入,記錄乙個sum字首和,當sum<0時捨去,都為負數了我還要個屁啊。每次相加的時候都用ans記錄了下來,所以最大值總在這裡面。

什麼一段,兩段,管他多少,ans都記錄了。

講sum賦0時一定要在ans=max(ans,sum)後面,不然ans的值肯定就一定是正的啦。但是當資料全負 的時候就會錯。

#includeusing namespace std;

int main()

cout<}

P1115 最大子段和

給出一段序列,選出其中連續且非空的一段使得這段和最大。輸入格式 輸入檔案maxsum1.in的第一行是乙個正整數n,表示了序列的長度。第2行包含n個絕對值不大於10000的整數a i 描述了這段序列。輸出格式 輸入檔案maxsum1.out僅包括1個整數,為最大的子段和是多少。子段的最小長度為1。輸...

P1115 最大子段和

給出一段序列,選出其中連續且非空的一段使得這段和最大。輸入格式 輸入檔案maxsum1.in的第一行是乙個正整數n,表示了序列的長度。第2行包含n個絕對值不大於10000的整數a i 描述了這段序列。輸出格式 輸入檔案maxsum1.out僅包括1個整數,為最大的子段和是多少。子段的最小長度為1。輸...

P1115 最大子段和

給出一段序列,選出其中連續且非空的一段使得這段和最大。輸入格式 輸入檔案maxsum1.in的第一行是乙個正整數n,表示了序列的長度。第2行包含n個絕對值不大於10000的整數a i 描述了這段序列。輸出格式 輸入檔案maxsum1.out僅包括1個整數,為最大的子段和是多少。子段的最小長度為1。輸...