Pagini recente » Cod sursa (job #1516854) | Cod sursa (job #398512) | Cod sursa (job #2030174) | Cod sursa (job #1714917) | Cod sursa (job #756847)
Cod sursa(job #756847)
#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;
}