Pagini recente » Cod sursa (job #379828) | Borderou de evaluare (job #851036) | Cod sursa (job #1432307) | Cod sursa (job #2006011) | Cod sursa (job #2217412)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("euro.in");
ofstream cout ("euro.out");
const int NMAX = 34567;
const long long INF = -(1LL << 62);
int n, t, x;
int m, rad;
long long s;
int last[1 + NMAX];
long long sum[1 + NMAX];
long long dp[1 + NMAX];
int main() {
cin >> n >> t;
s = INF;
for(int i = 1; i <= n; i++) {
cin >> x;
sum[i] = sum[i - 1] + x;
if(s < 0) {
m++;
s = 0;
}
s += x;
last[m] = i;
}
rad = sqrt(t) + 10;
for(int i = 1; i <= m; i++)
dp[i] = INF;
for(int i = 1; i <= m; i++) {
for(int j = max(0, i - rad); j < i; j++)
dp[i] = max(dp[i], dp[j] + (sum[last[i]] - sum[last[j]]) * last[i] - t);
}
cout << dp[m];
return 0;
}