Pagini recente » Cod sursa (job #1690344) | Cod sursa (job #123368) | Cod sursa (job #2904990) | Cod sursa (job #20038) | Cod sursa (job #2217414)
#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 = 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] + 1LL * (sum[last[i]] - sum[last[j]]) * last[i] - t);
}
cout << dp[m];
return 0;
}