这个题要理解最大子序列的一个很溜的算法。累加和为负的时候舍弃。当累加和大于之前最大的和的时候更新。具体我有点说不明白呢。。。
#include <iostream>
#include <vector>
using namespace std;
vector <int> Sub;
int main() {
int N;
int temp;
cin >> N;
bool tag;
int sum = 0;
int h = 0, t = 0;
int maxh = 0, maxsum = -1;//若全为负
for (int i = 0; i < N; i++) {
cin >> temp;
Sub.push_back(temp);
sum += Sub[i];
if (sum > maxsum) {
t = i;
maxh = h;
maxsum = sum;
}
else if (sum < 0)
{
h = i + 1;
sum = 0;
}
}
if (maxsum >= 0)
cout << maxsum << " " << Sub[maxh] << " " << Sub[t] << endl;
else
{
cout << "0" << " " << Sub[0] << " " << Sub[N-1] << endl;
}
return 0;
}