Pagini recente » Cod sursa (job #2966027) | Cod sursa (job #2970438) | Cod sursa (job #2011673) | Cod sursa (job #1646431) | Cod sursa (job #2771808)
/* VARIANTA RECURSIVA 60p
#include <fstream>
#include <cstdlib>
std::ifstream fin("ssm.in");
std::ofstream fout("ssm.out");
struct element {
int value;
int start_pos;
int end_pos;
element& operator= (const element& other) {
this->value = other.value;
this->start_pos = other.start_pos;
this->end_pos = other.end_pos;
return *this;
}
};
int n;
int v[6000010];
element dp[6000010];
element solve(int n) {
if(n == 0) {
dp[0].value = v[0];
dp[0].start_pos = 0;
dp[0].end_pos = 0;
return dp[0];
}
dp[n - 1] = solve(n - 1);
if (dp[n - 1].value + v[n] > v[n]) {
dp[n].value = dp[n - 1].value + v[n];
dp[n].end_pos = dp[n-1].end_pos+1;
dp[n].start_pos = dp[n - 1].start_pos;
return dp[n];
}
else {
dp[n].value = v[n];
dp[n].start_pos = n;
dp[n].end_pos = n;
return dp[n];
}
}
int main() {
fin >> n;
for (int i = 0; i < n; i++) {
fin >> v[i];
}
solve(n);
element m = { INT32_MIN, 0, 0 };
for (int i = 0; i < n; i++) {
if (m.value < dp[i].value) {
m = dp[i];
}
}
fout << m.value << ' ' << m.start_pos+1 << ' ' << m.end_pos+1 << '\n';
return 0;
}*/
#include <fstream>
#include <cstdlib>
std::ifstream fin("ssm.in");
std::ofstream fout("ssm.out");
int n, a, s, inceput, sfarsit, max_s = INT32_MIN, max_inceput, max_sfarsit;
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> a;
if (s + a > a) {
s += a;
sfarsit++;
} else {
inceput = i;
sfarsit = i;
s = a;
}
if(s > max_s) {
max_s = s;
max_inceput = inceput;
max_sfarsit = sfarsit;
}
}
fout << max_s << ' ' << max_inceput << ' ' << max_sfarsit << '\n';
return 0;
}