Cod sursa(job #1586862)

Utilizator andreey_047Andrei Maxim andreey_047 Data 1 februarie 2016 18:05:24
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<bits/stdc++.h>

using namespace std;

struct el
{
    int c,poz;
};

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

const int NMAX=2005;

int n,job,dp[2][NMAX];
el a[NMAX];

inline bool cmp(const el A,const el B)
{
    return A.poz<B.poz;
}

int main()
{
    int i,j,aux,mx=-(1<<30),s;
    fin>>n>>job;
    for (i=1;i<=n;i++) fin>>a[i].poz>>a[i].c;
    sort(a+1,a+n+1,cmp);
    for (i=1;i<=n;i++)
        {
            dp[0][i]=a[i].c-job;
            //stanga
            for (j=i-1,s=a[i].c;j>=1;j--)
                {
                    if (a[j].c>=a[i].c) s+=a[i].c;
                    dp[0][i]=max(dp[0][i],s-(a[i].poz-a[j].poz+1)*job);
                }
            //dreapta
            for (j=i+1,s=0;j<=n;j++)
                {
                    if (a[j].c>=a[i].c) s+=a[i].c;
                    dp[1][i]=max(dp[1][i],s-(a[j].poz-a[i].poz)*job);
                }
            mx=max(mx,dp[0][i]+dp[1][i]);
        }
    fout<<mx<<"\n";
    return 0;
}