Pagini recente » Cod sursa (job #1855573) | Cod sursa (job #618263) | Cod sursa (job #836186) | Cod sursa (job #1797330) | Cod sursa (job #603642)
Cod sursa(job #603642)
# include <cstdio>
const char *FIN = "euro.in", *FOU = "euro.out";
const int MAX = 34569;
int N, T, V[MAX], S[MAX];
struct vec {
int x, y;
} A[MAX];
long long dp[MAX];
inline void getmax (long long &A, long long B) {
A = A > B ? A : B;
}
int main (void) {
freopen (FIN, "r", stdin);
scanf ("%d %d", &N, &T);
for (int i = 1; i <= N; ++i) {
scanf ("%d", V + i);
S[i] = S[i - 1] + V[i];
if (A[A[0].x].x < 0 || A[0].x == 0) ++A[0].x;
A[A[0].x] = vec {A[A[0].x].x + V[i], i};
}
for (int i = 1; i <= A[0].x; ++i) {
dp[i] = -0x3f3f3f3f3f3f3fLL;
for (int j = i; j + 1 && (i - j) * (i - j) <= 1000 + T; --j)
getmax (dp[i], dp[j] + (S[A[i].y] - S[A[j].y]) * 1LL * A[i].y - T);
}
fprintf (fopen (FOU, "w"), "%lld", dp[A[0].x]);
}