01-複雜度2 Maximum Subsequence Sum (25分)
阿新 • • 發佈:2019-02-07
/* * 1. 最小的i和j * 2. 若序列全為0,輸出頭尾元素。 */ #include <iostream> using namespace std; int main(void) { bool isNegative(true); //記錄序列是否全為負數 int first(0), last(0); //記錄第一個和最後一個輸入資料。 //當前和、最大和、最小i、最小j、當前i。 int thisSum(0), maxSum(0), si(0), sj(0), currI(0); bool isFirst(true); //標記子序列的第一個數字,輔助選出最小i。 int n, data; cin >> n; for(int m(0); m < n; ++m) { cin >> data; if(isNegative && data >= 0) isNegative = false; if(m == 0) first = data; if(m == n - 1) last = data; thisSum += data; if(isFirst && thisSum >= 0) { currI = data; //當前子序列的最小i isFirst = false; } if(thisSum > maxSum) { si = currI; //thisSum > maxSum時,thisSum是最大子列,si更新。 maxSum = thisSum; sj = data; } else if(thisSum < 0) { thisSum = 0; isFirst = true; } } if(isNegative) cout << 0 << " " << first << " " << last; else cout << maxSum << " " << si << " " << sj; return 0; }