Cod sursa(job #15134)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 10 februarie 2007 21:08:24
Problema Euro Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>

#define MAXN 34569

int N, T;
int x[MAXN], y[MAXN], d[MAXN];
int s[MAXN];
long long best[MAXN];

int main()
{
	freopen("euro.in", "rt", stdin);
	freopen("euro.out", "wt", stdout);
	scanf("%d %d", &N, &T);
	int i, S = 0;
	for (i = 1; i <= N; i++)
	{
		scanf("%d", x + i);
		S += x[i];
		if (S < 0)
		{
			y[++y[0]] = S;
			s[ y[0] ] = s[ y[0] - 1 ] + S;
			d[++d[0]] = i;
			S = 0;
		}
	}
	if (S)
	{
		y[++y[0]] = S;
		s[ y[0] ] = s[ y[0] - 1 ] + S;
		d[++d[0]] = N;
	}

	best[0] = 0;
	for (i = 1; i <= y[0]; i++)
	{
		best[i] = -(1LL << 60);

		int j; long long S2 = 0;
		for (j = 0; j <= i; j++)
		{
			S2 = (long long)d[i] * (s[i] - s[j - 1]);

			if (best[j - 1] + S2 - T > best[i])
				best[i] = best[j - 1] + S2 - T;
		}
	}
	
	printf("%lld\n", best[ y[0] ]);
	return 0;
}