Cod sursa(job #769918)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 21 iulie 2012 12:38:38
Problema Euro Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>

#define maxn 35000

FILE*f=fopen("euro.in","r");
FILE*g=fopen("euro.out","w");

int n,T,N;
int A[maxn],day[maxn];
long long D[maxn];

const long long INF = 1LL<<62;

int main () {
	
	fscanf(f,"%d %d",&n,&T);
	int x,s = 0;
	for ( int i = 1 ; i <= n ; ++i ){
		fscanf(f,"%d",&x);
		s += x;
		
		if ( s < 0 ){
			A[++N] = s; day[N] = i;
			s = 0;
		}
		else{
			if ( i == n ){
				A[++N] = s; day[N] = i;
			}
		}
	}
	
	int sqrtT = 0; while ( (sqrtT+1) * (sqrtT+1) <= T )	++sqrtT;
	++sqrtT;
	
	for ( int i = 1 ; i <= N ; ++i ){
		D[i] = -INF;
		
		int s = 0;
		for ( int j = i ; i - j <= sqrtT && j > 0 ; --j ){
			s += A[j];
			long long now = D[j-1] + 1LL*s*day[i];
			if ( D[i] < now ){
				D[i] = now;
			}
		}
		D[i] -= T;
	}
	
	fprintf(g,"%lld\n",D[N]);
	
	fclose(f);
	fclose(g);
	
	return 0;
}