我题目看错了,如果是全是负数要输出首尾的元素
#include <iostream>
#include <string>
#include <set>
#include <map>
#include<queue>
#include<stack>
#include<algorithm>
//new and delete
//A1003 Emergency
using namespace std;
const int MaxN = 100010;
const int Inf = 0x3fffffff;
int data1[MaxN]; //数据数组
int d_sum[MaxN]; //子列和
int d_findex[MaxN]; //子列和第一个元素地址
int main() {
int K;
cin >> K;
for (int i = 0; i < K; i++) {
cin >> data1[i];
}
d_sum[0] = data1[0];
d_findex[0] = 0;
for (int i = 1; i < K; i++) {
//状态转移方程
d_sum[i] = max(data1[i], d_sum[i - 1] + data1[i]);
if (d_sum[i]!= data1[i]) {
//if (d_sum[i - 1] + data1[i]> data1[i]) {
d_findex[i] = d_findex[i - 1];
}
else {
d_findex[i] = i;
}
}
int first=-1, last=-1, MAX=-1;
for (int i = 0; i < K; i++) {
if (MAX < d_sum[i]) {
MAX = d_sum[i];
first = d_findex[i];
last = i;
}
}
if (MAX >= 0)
cout << MAX << " " << data1[first] << " " << data1[last] << endl;
else
cout << "0" << " "<<data1[0] <<" "<< data1[K - 1] << endl;
return 0;
}