Cod sursa(job #1630701)

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

void Split()
{
    int sum=0;
    for(int 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;
}
int DistBack()
{
    int i,sol=0;
    for(i=1;i<=T;i++)
        if((i*(i+1))/2>=T)
            return i;
}
void Solve()
{
    int back=DistBack();
    for(int i=1;i<=V[0];i++)
    {
        int sum=V[i];
        for(int j=1; i-j>=0 && j<=back;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;
}