Cod sursa(job #1401735)

Utilizator felixiPuscasu Felix felixi Data 26 martie 2015 09:04:38
Problema Carnati Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <cstring>
#include <algorithm>

using namespace std;

ifstream in("carnati.in");
ofstream out("carnati.out");

struct CLIENT {
    int t,p,c;
};

const int NMAX = 2000;

bool cmp( CLIENT A, CLIENT B ) {
    return ( A.t < B.t );
}

CLIENT v[NMAX+2];
int d[NMAX+2];
int N, C, Ans = - ( 1 << 30 );

int main() {
    in >> N >> C;
    for( int i = 1;  i <= N;  ++i )  in >> v[i].t >> v[i].p;
    sort( v+1, v+N+1, cmp );
    for( int i = 1;  i <= N;  ++i )  v[i].c = ( v[i].t - v[i-1].t ) * C;
    for( int i = 1;  i <= N;  ++i ) {
        memset( d, 0, sizeof(d) );
        int PR = v[i].p;
        for( int i = 1;  i <= N;  ++i ) {
            if( PR <= v[i].p ) {
                d[i] = max( PR - C , d[i-1] - v[i].c + PR );
            }
            else {
                d[i] = max( -C, d[i-1] - v[i].c );
            }
        }
        Ans = max( Ans, *max_element(d+1, d+N+1) );
    }
    out << Ans << '\n';
    return 0;
}