Cod sursa(job #1686878)

Utilizator preda.andreiPreda Andrei preda.andrei Data 12 aprilie 2016 14:48:46
Problema Carnati Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

int profitMax[2001];
int pretMin[2001];
int tStart[2001];
int carnati[2001];

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

    int n, salariu, pmax = 0, t, p, pretNou;

    fin >> n >> salariu;

    for(int i = 1; i <= n; ++i){
        fin >> t >> p;
        tStart[i] = t;
        pretMin[i] = p;
        profitMax[i] = p - salariu;
        carnati[i] = 1;

        for(int j = i - 1; j >= 1; --j){
            pretNou = (p <= pretMin[j]) ? p : pretMin[j];
            if(pretNou * (carnati[j] + 1) - salariu * (t - tStart[j] + 1) > profitMax[i]){
                profitMax[i] = pretNou * (carnati[j] + 1) - salariu * (t - tStart[j] + 1);
                tStart[i] = tStart[j];
                carnati[i] = carnati[j] + 1;
                pretMin[i] = pretNou;
            }
        }

        if(profitMax[i] > pmax)
            pmax = profitMax[i];

    }

    fout << pmax;
    return 0;
}