Cod sursa(job #3269993)

Utilizator MaricelaEnache Maricela Raluca Georgiana Maricela Data 21 ianuarie 2025 17:51:11
Problema Subsecventa de suma maxima Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream cin ("ssm.in");
ofstream cout ("ssm.out");
int n, x,i1,i2;
vector <int> s;
// 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 p, vector<int> &v) {
	vector<int> dp(p + 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 <= p; ++i) {
		if (dp[i - 1] >= 0) {
			// extinde la dreapta cu v[i]
			dp[i] = dp[i - 1] + v[i], i2 ++;
		} else {
			// încep o nouă secvență
			dp[i] = v[i], i1 = i, i2 = i;
		}
	}

	// soluția e maximul din vectorul dp
	int sol = dp[1];
	for (int i = 2; i <= p; ++i) {
		if (dp[i] > sol) {
			sol = dp[i];
		}
	}

        return sol; // aceasta este suma asociată cu SSM
}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> x, s.push_back(x);
    cout << SSM (n, s) << ' ' << i1 + 1 << ' ' << i2 - 1;

    return 0;
}