Pagini recente » Cod sursa (job #3324401) | Monitorul de evaluare | Cod sursa (job #631935) | Cod sursa (job #208964) | Cod sursa (job #3350113)
#include <vector>
#include <iostream>
using namespace std;
// găsește SSM pentru vectorul v cu n elemente
// pentru a menține convenția din explicații:
// - elementele sunt indexate de la 0, dar le folosesc doar pe cele care incep de la 1
// => v[1], ..., v[n]
int SSM(int n, vector<int> &v) {
vector<int> dp(n + 1); // vector cu n + 1 elemente (indexarea începe de la 0)
// am nevoie de dp[1], ..., dp[n]
// 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];
}
}
return sol; // aceasta este suma asociată cu SSM
}
int main() {
int n;
cin >> n;
vector<int> v(n + 1);
for(int i = 1; i <= n; i++)
cin >> v[i];
int sol = SSM(n, v);
cout << sol << "\n";
return 0;
}