Pagini recente » Cod sursa (job #941361) | Cod sursa (job #1931334) | Cod sursa (job #2770248) | Cod sursa (job #2207722) | Cod sursa (job #942494)
Cod sursa(job #942494)
#include<fstream>
#define maxn 35000
using namespace std;
ifstream fin("euro.in"); ofstream fout("euro.out");
int n, T, N;
int A[maxn], day[maxn];
int D[maxn];
const long long INF = 1LL<<62;
int main ()
{
fin >> n >> T;
int x, s = 0;
for(int i = 1 ; i <= n ; ++i)
{
fin >> x;
s += x;
if(s < 0)
{
A[++N] = s;
day[N] = i;
s = 0;
}
else
{
if(i == n)
{
A[++N] = s;
day[N] = i;
}
}
}
int sqrtT = 0;
while((sqrtT + 1) * (sqrtT + 1) <= T )
++sqrtT;
sqrtT += 2;
for(int i = 1 ; i <= N ; ++i )
{
D[i] = -INF;
int s = 0;
for(int j = i ; i - j <= sqrtT && j > 0 ; --j)
{
s += A[j];
long long now = D[j-1] + 1LL * s * day[i];
if(D[i] < now)
D[i] = now;
}
D[i] -= T;
}
fout << D[N] << "\n";
fin.close(); fout.close();
return 0;
}