Cod sursa(job #2377217)

Utilizator mihai.constantinConstantin Mihai mihai.constantin Data 8 martie 2019 23:32:34
Problema Subsecventa de suma maxima Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
// Darius Neatu 2018
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

void SSM(int n, vector<int> &v) {
	vector<int> dp(n); // vector cu n elemente
	vector<int> start(n);

	// caz de baza
	dp[0] = v[0];
	start[0] = 0;

	// caz general
	for (int i = 1; i < n; ++i) {
		if (dp[i - 1] >= 0) {
			// extinde la dreapta cu v[i]
			dp[i] = dp[i - 1] + v[i];
			start[i] = start[i-1];
		} else {
			// incep o noua secventa
			dp[i] = v[i];
			start[i] = i;
		}
	}

	// solutia e maximul din vectorul dp
	int sol = dp[0], pos = 0;
	for (int i = 1; i < n; ++i) {
		if (dp[i] > sol) {
			sol = dp[i];
			pos = i;
		}
	}

	cout << sol << " " << start[pos] + 1 << " " << pos + 1  << "\n";
}

int main() {
	freopen("ssm.in", "r", stdin);
	freopen("ssm.out", "w", stdout);

	int n;
	vector<int> v;
	
	// citeste datele
	cin >> n;
	v.resize(n); // redimensioneaza v sa aiba n elememnte
	for (int i = 0; i < n; ++i) {
		cin >> v[i];
	}

	// afiseaza solutia
	SSM(n, v);

	return 0;
}