Cod sursa(job #3241544)

Utilizator ralbertoRadu Alberto ralberto Data 31 august 2024 12:33:40
Problema Subsecventa de suma maxima Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#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; 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;
}