Cod sursa(job #750521)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 22 mai 2012 14:11:38
Problema Euro Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <cmath>
#define nmax 34600
#define inf -1000000000000000LL

int n, t, c[nmax], h, s[nmax], p[nmax];
long long sol[nmax];

inline long long max (long long a, long long b)
{
	if (a < b) a = b;
	return a;
}

int main()
{
	freopen ("euro.in", "r", stdin);
	freopen ("euro.out", "w", stdout);
	scanf ("%d %d", &n, &t);
	int i, j, r;
	for (i = 1; i <= n; i++) scanf ("%d ", &c[i]);
	h = 1;
	for (i = 1; i <= n; i++)
	{
		if (s[h] >= 0) s[h] += c[i]; else
			s[++h] = c[i];
		p[h] = i;
	}
	for (i = 1; i <= h; i++) s[i] += s[i-1];
	r = sqrt (t);
	for (i = 1; i <= h; i++)
	{
		sol[i] = inf;
		for (j = max (0, i-r-2); j < i; j++)
			sol[i] = max (sol[i], sol[j] + (long long) (s[i]-s[j]) * (long long) p[i] - t);
	}
	printf ("%lld\n", sol[h]);
}