Cod sursa(job #603559)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 17 iulie 2011 12:48:13
Problema Euro Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.68 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define maxn 35010

int n, m, i, t, j;
long long v[maxn], g[maxn], l[maxn], s[maxn], d[maxn];

int main()
{
    freopen("euro.in", "r", stdin);
    freopen("euro.out", "w", stdout);

    scanf("%d%d", &n, &t);
    m=1;
    for(int i=1; i<=n; ++i)
    {
        scanf("%lld", &v[i]);
        s[i]=s[i-1]+v[i];

        if(g[m]<0)
            ++m;
        g[m]+=v[i];
        l[m]=i;
    }

    for(int i=1; i<=m; ++i)
    {
        d[i]=-1LL*1000000000*1000000000;
        for(int j=i; j>=0 && (i-j)*(i-j)<=t+1000; --j)
            d[i]=max(d[i], d[j]+(s[l[i]]-s[l[j]])*l[i]-t);
    }

    printf("%lld\n", d[m]);

    return 0;
}