Cod sursa(job #756849)

Utilizator VisuianMihaiMihai Visuian VisuianMihai Data 10 iunie 2012 15:53:44
Problema Euro Scor 80
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.83 kb
#include <fstream>
using namespace std;
ifstream fin("euro.in");
ofstream fout("euro.out");
#define MAXN 34569
int N, T;
int x[MAXN];
long long best[MAXN], y[MAXN], d[MAXN];
int s[MAXN];

int main()
{
	fin >> N >> T;
	int i, S = 0;
	for (i = 1; i <= N; i++)
	{
		fin >> 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;
		}
	}
	
	fout << best[y[0]];
	
	fin.close();
	fout.close();
	return 0;
}