Cod sursa(job #1640931)

Utilizator PMihaiPascalau Mihai PMihai Data 8 martie 2016 20:01:15
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <stdlib.h>
using namespace std;

ifstream f("ssm.in");
ofstream g("ssm.out");

void citire(int n, int *a)
{
    for(int i = 1; i <= n; i++)
    {
        f>>a[i];
    }
}

int main()
{
    int n,smax,pi;
    int *a,*dp;

    f>>n;
    a = (int*)malloc(sizeof(int) * (n + 1));
    dp = (int*)malloc(sizeof(int) * (n + 1));
    citire(n,a);
    smax=a[n];
    dp[n]=a[n];
    pi=n;
    for(int i = n-1; i >= 1; i--)
    {
        if(dp[i+1]+a[i] > a[i])
        {
            dp[i]=dp[i+1]+a[i];
        }
        else
        {
            dp[i] = a[i];
        }
        if(smax < dp[i])
            {
                smax=dp[i];
                pi=i;
            }
    }
    g<<smax<<" "<<pi;
    int ok = 0,s=0;
    for(int i = pi; i <=n && ok == 0; i++)
    {
        s+=a[i];
        if(s==smax)
        {
            g<<" "<<i;
            ok = 1;
        }
    }
    f.close();
    g.close();
    return 0;
}