Pagini recente » Cod sursa (job #2584246) | Cod sursa (job #2226081) | Cod sursa (job #487897) | Cod sursa (job #1632139) | Cod sursa (job #65941)
Cod sursa(job #65941)
#include <stdio.h>
#define filein "euro.in"
#define fileout "euro.out"
#define MAXN 34567
int t;
struct val {
int val, pos, back;
long long max;
} e[MAXN];
int ne;
void read_in(void)
{
int i, n, a[MAXN];
freopen(filein, "r", stdin);
scanf("%d%d", &n, &t);
for(i = 0; i < n; i++)
scanf("%d", a + i);
for(i = 0; i < n - 1; i++) {
e[ne].val += a[i];
if(e[ne].val < 0)
e[ne++].pos = i + 1;
}
e[ne].val += a[n - 1];
e[ne++].pos = n;
}
int main()
{
int i, j, totsum, parsum, back;
long long max;
read_in();
totsum = e->val;
e->back = 0;
e->max = (long long) totsum * e->pos - t;
for(i = 1; i < ne; i++) {
totsum += e[i].val;
max = (long long) totsum * e[i].pos;
back = 0;
parsum = e[i].val;
for(j = i - 1; (j >= e[i - 1].back) && (i - j <= 200); j--) {
if((long long) parsum * e[i].pos + e[j].max > max) {
max = (long long) parsum * e[i].pos + e[j].max;
back = j;
}
parsum += e[j].val;
}
e[i].back = back;
e[i].max = max - t;
}
freopen(fileout,"w",stdout);
printf("%Ldn", e[ne - 1].max);
return(0);
}