Cod sursa(job #223423)

Utilizator Mishu91Andrei Misarca Mishu91 Data 28 noiembrie 2008 16:49:23
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define MAX_N 2005

struct client{int t, p;} V[MAX_N];
int N, C;
long Bst[MAX_N], Max, M;

void citire()
{
    scanf("%d %d",&N, &C);

    for(int i = 1; i <= N; ++i)
        scanf("%d %d",&V[i].t, &V[i].p);
}

struct cmp
{
    bool operator()(const client a, const client b) const
    {
        return(a.t < b.t);
    }
};

void solve()
{
    sort(V+1, V+N+1, cmp());

    Bst[0] = V[0].t = V[0].p = -10;
    for(int i = 1; i <= N; ++i)
    {
        int X = V[i].p, lst = 0;

        for(int i = 1; i <= N; ++i)
        {
            if(V[i].p < X) {Bst[i] = 0; continue;}
            Bst[i] = X - C;
            long k = Bst[lst] + X - C*(V[i].t - V[lst].t);
            if(k > Bst[i])
                Bst[i] = k, lst = i;
            else
                lst = i;
            if(Bst[i] > Max)
                Max = Bst[i];
        }
   }

   printf("%ld\n", Max);
}

int main()
{
    freopen("carnati.in","rt",stdin);
    freopen("carnati.out","wt",stdout);

    citire();
    solve();
}