Cod sursa(job #23168)

Utilizator gcosminGheorghe Cosmin gcosmin Data 28 februarie 2007 13:10:46
Problema Euro Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>

#define LL long long
#define NMAX 35000

int N, T;

int a[NMAX];
int b[NMAX];
int t[NMAX];

LL din[NMAX];

LL LMAX(LL a, LL b) { return (a > b) ? a : b; }

int main()
{
	int i, j, s;
    
    freopen("euro.in", "r", stdin);
    freopen("euro.out", "w", stdout);
    
    scanf("%d %d", &N, &T);
    
    for (i = 1; i <= N; i++) scanf("%d", &a[i]);
    
    for (i = 1; i <= N; ) {
        for (s = 0, j = i; j <= N && s >= 0; s += a[j], j++);
        
        b[++b[0]] = s;
        t[++t[0]] = j - 1;
        
        i = j;   	
    }
    
    // dinamica in N^2 pe componente
    
    int last = 1, lc;
    LL aux;
    for (i = 1; i <= b[0]; i++) {
        din[i] = -((LL)1 << 62);
        if (i == b[0]) last = 1;
        for (j = i, s = 0; j >= last; j--) {
            s += b[j];
            aux = din[j-1] + (LL) s * t[i] - T;
            if (aux > din[i]) din[i] = aux, lc = j;
 		}   	
 		last = lc;
    }
    
    printf("%lld\n", din[b[0]]);
    
fclose(stdin);
fclose(stdout);
return 0;
}