Cod sursa(job #2097964)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 1 ianuarie 2018 22:47:17
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <set>
#include <algorithm>
#define VAL 2005

using namespace std;

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

struct customer
{
    int t, p;
};

customer v[VAL];

int N, C, i, j, last;
int ANS, dp[VAL];
set <int> P;
set <int> :: iterator it;

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

int main()
{
    fin >> N >> C;
    for (i=1; i<=N; i++)
    {
        fin >> v[i].t >> v[i].p;
        P.insert(v[i].p);
    }
    sort(v+1, v+N+1, cmp);
    for (it=P.begin(); it!=P.end(); it++)
    {
        for (i=1; i<=N; i++)
          dp[i]=0;
        last=0;
        for (i=1; i<=N; i++)
        {
            if (v[i].p>=*it)
            {
                if (last==0)
                  dp[i]=*it-C;
                else
                  dp[i]=max(*it-C, dp[last]+*it-C*(v[i].t-v[last].t));
                last=i;
                ANS=max(ANS, dp[i]);
            }
        }
    }
    fout << ANS << '\n';
    fin.close();
    fout.close();
    return 0;
}