Cod sursa(job #1679583)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 8 aprilie 2016 03:50:57
Problema Euro Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<cstdio>
long long n,t,i,j,nr,p,u,s,a,b,v[501000],x[501000],y[501000],z[501000],d[501000];
FILE *f,*g;
long long maxim(long long a,long long b){
    if(a>b)
        return a;
    return b;
}
int main(){
    f=fopen("euro.in","r");
    g=fopen("euro.out","w");
    fscanf(f,"%lld%lld",&n,&t);
    for(i=1;i<=n;i++){
        fscanf(f,"%lld",&v[i]);
        s += v[i];
        if( s < 0 ){
            x[++nr] = s;
            y[nr] = i;
            s = 0;
        }
    }
    if( nr != n ){
        x[++nr] = s;
        y[nr] = n;
    }
    for(i=1;i<=nr;i++){
        a = x[i];
        b = y[i];
        d[ i + 1 ] = d[i] + a * b - t;
        for( j = i - 1; j >= 0 && ( i - j ) * ( i - j ) <= t + 100 ; j-- ){
            a += x[j];
            d[ i + 1 ] = maxim( d[ i + 1 ] , d[j] + a * b - t );
        }
    }
    fprintf(g,"%lld",d[ nr + 1 ]);




    fclose(f);
    fclose(g);
    return 0;
}