Cod sursa(job #2966340)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 17 ianuarie 2023 08:39:32
Problema Euro Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
using namespace std;

ifstream cin( "euro.in" );
ofstream cout( "euro.out" );

long long dp[ 34570 ];
int l[ 34570 ];
int q[ 34570 ];
int s[ 34570 ];
int n, m, t;

int main()
{
    int V;
    m = 1;
    cin >> n >> t;
    for( int i = 1; i <= n; i++ ) {
        cin >> V;
        s[ i ] = s[ i - 1 ] + V;
        m += ( q[ m ] < 0 );
        q[ m ] += V;
        l[ m ] = i;
    }

    const long long INF = ( 1LL << 60 );
    for( int i = 1; i <= m; i++ ) {
        dp[ i ] = -INF;
        for( int j = i; j >= 0 && ( i - j ) * ( i - j ) <= t + 1000; j-- )
            dp[ i ] = max( dp[ i ], dp[ j ]+ (long long)( s[ l[ i ] ] - s[ l[ j ] ] ) * l[ i ] - t );
    }

  cout << dp[ m ] << '\n';
  return 0;
}