Cod sursa(job #778366)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 14 august 2012 16:10:52
Problema Euro Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#include <algorithm>
#include <vector>

#define MAXN 35000
#define per pair<long long, long long>

using namespace std;

long long A[MAXN];
long long D[MAXN];
per Q[MAXN];
long long s;
int i, j, N, M;
long long T;
per a;

int main()
{
	freopen("euro.in","r",stdin);
	freopen("euro.out","w",stdout);

	scanf("%d %lld", &N, &T);
	for (i = 1; i <= N; ++i)
		scanf("%d",&A[i]);
	
	M = 0;
	for (i = 1; i <= N; ){
		s = 0;
		while (s >= 0 && i <= N){
			s = s + A[i];
			++i;
		}
		Q[++M] = make_pair(s, i-1);
	}
	D[0] = 0;
	for (i = 1; i <= M; ++i){
		a = Q[i];
		D[i] = D[i-1] + a.first * a.second - T;
		for (j = i - 1; j >= 1 && (j-i) * (j-i) <= T + 100; --j){
			a.first += Q[j].first;
			D[i] = max(D[i], D[j] + a.first * a.second - T);
		}
	}
	printf("%lld\n", D[M]);
	return 0;
}