Cod sursa(job #2566315)

Utilizator LucianaElenaPirlogea Luciana-Elena LucianaElena Data 2 martie 2020 20:28:55
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
/// fie v cu n elemente vectorul dat
/// s[i] = suma maxima a unei secvente terminate chiar cu elementul de pe pozitia i
/// la calculul lui s[i] vom folosi deci obligatoriu elementul de pe pozitia i
/// avem doua variante: lipim elementul de pe pozitia i la cea mai buna suma
/// ce se poate obtine pana la pozitia anterioara, si atunci am avea s[i] = s[i-1]+v[i]
/// sau incepem cu el o secventa noua, asadar s[i] = maxim(v[i], v[i]+s[i-1])
/// Observam ca un element din s se calculeaza doar din anteriorul si atunci, in loc
/// sa tinem un vector, tinem o singura variabila s care e odata optimul de la pozitia anterioara
/// si apoi se actualizeaza pentru pozitia curenta.

#include<fstream>
using namespace std;
int n, x, maxim, i, s, pmax, umax, p;
int main()
{
    ifstream fin("ssm.in");
    ofstream fout("ssm.out");
    fin>>n;

    maxim = -2000000000;
    p = 1;

    for (i=1;i<=n;i++) {
        fin>>x;
        if (x + s >= x) {
            s = x + s;
        }else {
            s = x;
            p = i;
        }

        if (s > maxim) {
            maxim = s;
            pmax = p;
            umax = i;
        }

    }

    fout<<maxim<<" "<<pmax<<" "<<umax;

    return 0;
}