Cod sursa(job #1630711)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 5 martie 2016 10:52:14
Problema Euro Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
using namespace std;
ifstream f("euro.in");
ofstream g("euro.out");
long long N,T;
long long V[40005],Array[40005],DP[40005],Day[40005];
void Read()
{
    f>>N>>T;
    for(long long i=1;i<=N;i++)
        f>>Array[i];
    for(long long i=1;i<=N;i++)
        DP[i]=-100000000000000000;
}

void Split()
{
    long long sum=0;
    for(long long i=1;i<=N;i++)
    {
        sum+=Array[i];
        if(sum<0)
            V[++V[0]]=sum,Day[V[0]]=i,sum=0;
    }
    if(sum<0)
        return;
    V[++V[0]]=sum;
    Day[V[0]]=N;
}
long long DistBack()
{
    long long i,sol=0;
    for(i=1;i<=T;i++)
        if((i*(i+1))/2>=T)
            return i;
    return 0;
}
void Solve()
{
    long long back=DistBack();
    for(long long i=1;i<=V[0];i++)
    {
        long long sum=V[i];
        for(long long j=1; i-j>=0 && j<=back+1;j++)
        {
            DP[i]=max(DP[i],DP[i-j]+sum*Day[i]-T);
            sum+=V[i-1];
        }
    }
    g<<DP[V[0]]<<"\n";
}
int main()
{
    Read();
    Split();
    Solve();
    return 0;
}