Pagini recente » Cod sursa (job #824504) | Cod sursa (job #1070965) | Cod sursa (job #482195) | Cod sursa (job #2847034) | Cod sursa (job #2847796)
// Subsecv de suma maxima
#include<iostream>
#include<fstream>
#include<climits>
#include<vector>
using namespace std;
int dr = 1, st = 0, bestSubseq = INT_MIN, maxVal = INT_MIN;
int a[6000005], n;
// void ssm() {
// vector<int> sum(values.size());
// sum[0] = values[0];
// for (int i = 1; i < values.size(); i++)
// sum[i] = sum[i - 1] + values[i];
// vector<int> best(values.size());
// int min = sum[0];
// for (int i = 1; i < values.size(); i++) {
// best[i] = sum[i] - min;
// if (min > sum[i]) {
// min = sum[i];
// st = i + 2;
// }
// if (bestSubseq < best[i]) {
// bestSubseq = best[i];
// dr = i + 1;
// }
// }
// }
void ssm() {
vector<int> sum(n + 1);
sum[0] = 0;
maxVal = sum[0];
st = 0, dr = 1;
for (int i = 1; i <= n; i++) {
sum[i] = a[i] + sum[i - 1];
}
for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j++) {
if (sum[j] - sum[i - 1] > maxVal)
st = i, dr = j, maxVal = sum[j] - sum[i - 1];
}
}
}
int main() {
ifstream cin ("ssm.in");
ofstream cout ("ssm.out");
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
ssm();
cout << maxVal << " " << st << " " << dr;
return 0;
}