最大子列和问题,思路有很多种,深搜,dp都行,这里给出一种很俗的做法,快代码,慢代码,能过就是好代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int a[N];
int main(){
int n; cin >> n;
bool flag = false;
for(int i = 0; i < n; ++i){
cin >> a[i];
if(a[i] >= 0) flag = true;
}
int maxn = 0,le = 0,ri = 0;
for(int i = 0; i < n; ++i){
int cur = 0;
for(int j = i; j < n; ++j){
cur += a[j];
if(cur > maxn){
maxn = cur;
le = i;
ri = j;
}
}
}
if(maxn == 0 && le == 0 && ri == 0 && !flag)
cout << 0 <<" "<<a[0] << " " << a[n-1];
else if(maxn == 0 && le == 0 && ri == 0 && flag)
cout << "0 0 0";
else cout << maxn << " " << a[le] << " " << a[ri];
}