Pagini recente » Cod sursa (job #660615) | Cod sursa (job #1160334) | Cod sursa (job #1026282) | Cod sursa (job #1783393) | Cod sursa (job #4315)
Cod sursa(job #4315)
#include <cstdio>
using namespace std;
const char iname[] = "euro.in";
const char oname[] = "euro.out";
const int MaxN = 34568;
#define infinity 1e18
int n, T;
int A[MaxN];
int P[MaxN], size;
long long B[MaxN];
long long M[MaxN];
int main(void)
{
freopen(iname, "r", stdin);
freopen(oname, "w", stdout);
int i, j;
long long sum;
scanf("%d %d\n", &n, &T);
for (i = 1; i <= n; ++i)
scanf("%d ", A+i);
for (i = 1; i <= n; i = j) {
sum = 0;
for (j = i; sum >= 0 && j <= n; ++j)
sum += (long long)A[j];
++size;
B[size] = sum;
P[size] = j-1;
}
P[size] = n;
for (i = 1; i <= size; ++i) {
M[i] = -infinity;
sum = 0;
for (j = i; j >= 1 && i-j <= 200; --j) {
sum += B[j];
if (M[i] < (long long)(M[j-1] + sum * P[i] - T))
M[i] = (long long)(M[j-1] + sum * P[i] - T);
}
}
printf("%lld\n", M[size]);
return 0;
}