经典问题 最大子段和
坑点:If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence. 也就是说只有全是负数的时候才输出0 table[0] table[n-1],而 -1 -1 0 -1 -1 要输出 0 0 0
#include"bits/stdc++.h"
using namespace std;
int main(){
int n, table[33333];
cin >> n;
table[n] = 0x1234ABCD;
for(int i = 0; i < n; ++i) cin >> table[i];
int sum = 0;
int maxsum = -1;
int first = table[0];
int last = table[n - 1];
int maxfirst = first;
for(int i = 0; i < n; ++i){
sum += table[i];
if(sum < 0){
first = table[i + 1];
sum = 0;
}
else if(sum > maxsum){
maxsum = sum;
maxfirst = first;
last = table[i];
}
}
cout << (maxsum < 0 ? 0 : maxsum) << " " << maxfirst << " " << last << endl;
}