Cod sursa(job #2217414)

Utilizator lucametehauDart Monkey lucametehau Data 30 iunie 2018 13:09:05
Problema Euro Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#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;
}