Cod sursa(job #1626405)

Utilizator PMihaiPascalau Mihai PMihai Data 3 martie 2016 08:33:35
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 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);
    for(int i = n; i >= 1; i--)
    {
        if(i == n)
        {
            smax=a[i];
            dp[i]=a[i];
            pi=i;
            continue;
        }
        if(dp[i+1]+a[i] > 0)
        {
            dp[i]=dp[i+1]+a[i];
            if(smax<dp[i])
            {
                smax=dp[i];
                pi = i;
            }
        }
        else
        {
                dp[i]=a[i];
                pi=i;
            if(smax < dp[i])
            {
                smax=dp[i];
                pi=i;
            }
        }
        g<<"dp[i+1]:"<<dp[i+1]<<" dp[i]:"<<dp[i]<<" smax:"<<smax<<" a[i]:"<<a[i]<<"\n";
    }
    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;
}