Cod sursa(job #751562)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 26 mai 2012 12:55:14
Problema Euro Scor 65
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.78 kb
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;

ifstream in("euro.in");
ofstream out("euro.out");

#define N 33000

int n, t, d[N], sp[N], v[N], p[N], l, lim;
long long sol[N];

inline long long max(long long a, long long b) {
	return a>b ? a : b;
}

int main() {
	int i,j;
	
	in >> n >> t;
	
	l = 1;
	
	for(i = 1; i<=n; ++i) {
		in >> v[i];
		
		if(d[l] >= 0)
			d[l] += v[i];
		else
			d[++l] = v[i];
		p[l] = i;
	}
	
	for(i = 1; i<=l; ++i) {
		sp[i] = sp[i-1] + d[i];
		sol[i] = -1000000000000000LL;
	}
	
	lim = 2 * sqrt((double)t);
	
	for(i = 1; i <= l; ++i)
		for(j = max(i - lim, 0); j!=i; ++j)
			sol[i] = max(sol[i], sol[j] + (long long)(sp[i] - sp[j]) * (long long)p[i] - t);
	
	out << sol[l] << '\n';
	
	return 0;
}