Pagini recente » Cod sursa (job #1639243) | Cod sursa (job #3181220) | Cod sursa (job #1383661) | Cod sursa (job #2635197) | Cod sursa (job #3241548)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int SSM(int n, vector<int> &v, int &start, int &end) {
vector<int> dp(n + 1);
// caz de bază
dp[1] = v[1];
// caz general
for (int i = 2; i <= n; ++i) {
if (dp[i - 1] >= 0) {
// extinde la dreapta cu v[i]
dp[i] = dp[i - 1] + v[i];
} else {
// încep o nouă secvență
dp[i] = v[i];
}
}
// soluția e maximul din vectorul dp
int sol = dp[1];
for (int i = 2; i <= n; ++i) {
if (dp[i] > sol) {
sol = dp[i];
end = i;
}
}
for(int i = end - 1; i >= 1; i--)
if(dp[i] < 0){
start = i + 1;
break;
}
return sol;
}
int main()
{
int n;
fin >> n;
vector<int>v (n + 1);
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
int start;
int end;
int sol = SSM(n, v, start, end);
fout<<sol<<" ";
fout<<start<<" ";
fout<<end;
return 0;
}