Cod sursa(job #1560979)

Utilizator antanaAntonia Boca antana Data 3 ianuarie 2016 15:51:28
Problema Carnati Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#define MAX 2000
using namespace std;
struct client{
    int pret, t;
};
client v[MAX+1];
long long tmax, pmax, lim;
long long maxim(long long a, long long b)
{
    if(a>b)
        return a;
    return b;
}
int d[MAX];
long long best[MAX];
int main()
{
    freopen("carnati.in", "r", stdin);
    freopen("carnati.out", "w", stdout);
    int n, i, c, j;
    long long maxt=-1, sfinal=0;
    scanf("%d%d", &n, &c);
    for(i=1;i<=n;i++){
        scanf("%d%d", &v[i].t, &v[i].pret);
        maxt=maxim(maxt,v[i].t);
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=maxt;j++)
            d[j]=-1*c;
        for(j=1;j<=n;j++)
        {
            if(v[j].pret>=v[i].pret)
                d[v[j].t]+=v[i].pret;
        }
        //subsecventa de suma maxima
        long long smax=-1000001;
        for(j=1;j<=maxt;j++)
        {
            best[j]=maxim(best[j-1]+d[j], d[j]);
            smax=maxim(smax, best[j]);
        }
        sfinal=maxim(sfinal, smax);
    }
    printf("%lld", sfinal);
    return 0;
}