Pagini recente » Cod sursa (job #2416077) | Cod sursa (job #743192) | Cod sursa (job #1056814) | Cod sursa (job #1913544) | Cod sursa (job #1196724)
#include <cstdio>
#include <iostream>
#define maxn 35001
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
int n, T, N, A[maxn], day[maxn],i;
ll D[maxn];
int main ()
{
freopen("euro.in","r",stdin);
freopen("euro.out","w",stdout);
cin>>n>>T;
int x, s=0;
for(i = 1 ; i <= n ; ++i)
{
cin >> 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;
}
cout << D[N] << "\n";
return 0;
}