Cod sursa(job #1005511)

Utilizator harababurelPuscas Sergiu harababurel Data 5 octombrie 2013 10:32:50
Problema Subsecventa de suma maxima Scor 85
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
#define nmax 6000005
#define inf 1<<30
using namespace std;
int n, contor = 0, S = 0, sol = -inf, a, b, opt1, opt2;
int v[nmax], dp[nmax], pre[nmax];


int main() {
    ifstream f("ssm.in");
    ofstream g("ssm.out");
    f>>n;
    for(int i=1; i<=n; i++) f>>v[i];

    dp[n] = v[n];
    pre[n] = n;

    for(int i=n-1; i>=1; i--) {
        opt1 = v[i];
        opt2 = v[i] + dp[i+1];

        if(opt1 >= opt2) {
            dp[i] = opt1;
            pre[i] = i;
        }
        else {
            dp[i] = opt2;
            pre[i] = pre[i+1];
        }

    }

    for(int i=1; i<=n; i++)
        if(dp[i] > sol) {
            sol = dp[i];
            a = i;
            b = pre[i];
        }

    g<<sol<<" "<<a<<" "<<b<<"\n";
    return 0;
}