HAUT校賽--最大奇子段和
阿新 • • 發佈:2019-01-01
問題 G: 最大子段和
時間限制: 1 秒 記憶體限制: 64 MB提交: 42 解決: 10
提交 狀態
題目描述
一個大小為n的陣列a1到an(−10^4≤ai≤10^4)。請你找出一個連續子段,使子段長度為奇數,且子段和最大。
輸入
第一行為T(1≤T≤5),代表資料組數。
之後每組資料,第一行為n(1≤n≤10^5),代表陣列長度。
之後一行n個數,代表a1到an。
輸出
每組資料輸出一行,表示滿足要求的子段和最大值樣例輸入
1
4
1 2 3 4
樣例輸出
9
#include<stdio.h> #include<algorithm> using namespace std; int a[100005]; int main(void) { int T, n, i, sum, ans; scanf("%d", &T); while(T--) { scanf("%d", &n); for(i=1;i<=n;i++) scanf("%d", &a[i]); ans = sum = a[1]; for(i=2;i<=n-1;i+=2) /*兩個兩個滴加*/ { sum += a[i]+a[i+1]; if(sum<a[i+1]) /*這裡不是sum<0因為你刪除的時候也要兩個兩個刪除,所以你要保留最後一個!也就是和最後一個比較當前大小*/ sum = a[i+1]; ans = max(ans, sum); } sum = a[2]; /*兩個不同起點*/ for(i=3;i<=n-1;i+=2) { sum += a[i]+a[i+1]; if(sum<a[i+1]) sum = a[i+1]; ans = max(ans, sum); } printf("%d\n", ans); } return 0; }