Cod sursa(job #1357292)

Utilizator touristGennady Korotkevich tourist Data 23 februarie 2015 21:02:44
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
#include <algorithm>
#define Nmax 2005
#define INF 2000000000

using namespace std;

struct el
{
    int t,p;
    bool operator <(const el &A) const
    {
        return p<A.p;
    }
} a[Nmax];
int cnt[Nmax],n,c;

int main()
{
    int i,j,ans=-INF,maxim,P;
    freopen ("carnati.in","r",stdin);
    freopen ("carnati.out","w",stdout);
    scanf("%d%d", &n,&c);
    for(i=1;i<=n;++i) scanf("%d%d", &a[i].t,&a[i].p);
    sort(a+1,a+n+1);
    for(i=n;i;--i)
    {
        P=a[i].p;
        for(j=a[i].t;j<=1500;++j) ++cnt[j];
        maxim=-INF;
        for(j=0;j<=1500;++j)
        {
            if(j)
                maxim=max(maxim,j*c-cnt[j-1]*P);
            else
                maxim=max(maxim,j*c);
            ans=max(ans,cnt[j]*P-(j+1)*c+maxim);
        }
    }
    printf("%d\n", ans);
    return 0;
}