Cod sursa(job #3350113)

Utilizator cionescu2103Ionescu Cristina cionescu2103 Data 5 aprilie 2026 14:01:14
Problema Subsecventa de suma maxima Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#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;
}