Cod sursa(job #2504339)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 4 decembrie 2019 20:25:19
Problema Carnati Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int NMAX = 2000;
const int TMAX = 1500;

int N, C;
pair <int, int> clients[NMAX + 5];

vector < int > prices;

int cost[TMAX + 5];
int minSt[TMAX + 5], ans;

void SolveFor(int minPrice)
{
    for(int i = 0; i <= TMAX; i++)
        cost[i] = -C;

    for(int i = 1; i <= N; i++)
        if(clients[i].second >= minPrice)
            cost[clients[i].first] += minPrice;

    for(int i = 1; i <= TMAX; i++)
        cost[i] += cost[i - 1];

    ans = max(ans, cost[0]);
    minSt[0] = min(0, cost[0]);

    for(int i = 1; i <= TMAX; i++)
    {
        ans = max(ans, cost[i] - minSt[i - 1]);
        minSt[i] = min(minSt[i - 1], cost[i]);
    }
}

int main()
{
    fin >> N >> C;

    for(int i = 1; i <= N; i++)
    {
        fin >> clients[i].first >> clients[i].second;
        prices.push_back(clients[i].second);
    }

    for(auto it : prices)
        SolveFor(it);

    fout << ans << '\n';

    return 0;
}