Pagini recente » Rating Cheregi Alexandru (warrior98) | Cod sursa (job #226104) | Cod sursa (job #1090924) | Cod sursa (job #2299581) | Cod sursa (job #1585311)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream in("carnati.in");
ofstream out("carnati.out");
const int dmax = 2005;
const long long INF = 1000000000005LL;
struct ELEMENT {long long T, P;};
ELEMENT m[dmax];
long long d[dmax]; // d[i] == PROFITUL MAXIM DACA MAGAZINUL ESTE DESCHIS LA TRECEREA CLIENTULUI i
int N;
long long C;
bool exc(ELEMENT e1, ELEMENT e2)
{
if(e1.T == e2.T) return e1.P < e2.P;
else
return e1.T < e2.T;
}
int main()
{
int i, j;
long long Max, answer = -INF;
in >> N >> C;
for(i = 1; i <= N; i++) in >> m[i].T >> m[i].P;
sort(m + 1, m + N + 1, exc);
for(i = 1; i <= N; i++)
{
memset(d, 0, sizeof(d));
Max = -INF;
long long x = m[i].P; // IMI FIXEZ PRETUL
for(j = 1; j <= N; j++)
{
if(m[j].P >= x) // CLIENTUL i CUMPARA PRODUDUL i
d[j] = max(d[j - 1] - (m[j].T - m[j - 1].T) * C + x, x - C);
else
d[j] = max(d[j - 1] - (m[j].T - m[j - 1].T) * C, -C);
Max = max(Max, d[j]);
}
answer = max(answer, Max);
}
out << answer;
return 0;
}