Pagini recente » Cod sursa (job #2090161) | Cod sursa (job #2248997) | Cod sursa (job #2976908) | sadags | Cod sursa (job #2217415)
#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;
int s;
int last[1 + NMAX];
int sum[1 + NMAX];
long long dp[1 + NMAX];
int main() {
cin >> n >> t;
s = -1;
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] + 1LL * (sum[last[i]] - sum[last[j]]) * last[i] - t);
}
cout << dp[m];
return 0;
}