給出一段序列,選出其中連續且非空的一段使得這段和最大。
輸入格式:
第一行是乙個正整數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。輸...