Pagini recente » Cod sursa (job #38578) | Cod sursa (job #2940812) | Cod sursa (job #546708) | Cod sursa (job #1863711) | Cod sursa (job #769921)
Cod sursa(job #769921)
#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 += 2;
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;
}