Pagini recente » Cod sursa (job #2132692) | Cod sursa (job #2166508) | Cod sursa (job #3148197) | Cod sursa (job #772651) | Cod sursa (job #1841864)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("carnati.in");
ofstream out("carnati.out");
const int nMax = 2005;
struct clientStruct
{
int timp;
int pret;
};
int n, c;
clientStruct client[nMax];
int preturi[nMax];
int dp[nMax];
int rasp = 0;
bool cmp(clientStruct a, clientStruct b)
{
if(a.timp < b.timp)
return true;
return false;
}
void citire()
{
in >> n >> c;
for(int i = 1; i <= n; ++i)
{
in >> client[i].timp >> client[i].pret;
preturi[i] = client[i].pret;
}
sort(client + 1, client + n + 1, cmp);
// sort(preturi + 1, preturi + n + 1);
}
void TestPret(int pret)
{
int i;
for(i = 1; i <= n; ++i)
{
if(client[i].pret >= pret)
{
dp[i] = pret - c;
break;
}
else
dp[i] = 0;
}
++i;
int cont;
int inc;
while(i <= n)
{
if(client[i].pret >= pret)
{
cont = dp[i-1] + pret - c * (client[i].timp - client[i-1].timp);//daca continuam secventa
inc = pret - c;//daca incepem subsecventa noua
dp[i] = max(inc, cont);
}
else
{
cont = dp[i-1] - c * (client[i].timp - client[i-1].timp);
inc = -c;
dp[i] = max(inc, cont);
}
++i;
}
for(int i = 1; i <= n; ++i)
{
rasp = max(rasp, dp[i]);
}
}
void rezolvare()
{
for(int i = 1; i <= n; ++i)
{
TestPret(preturi[i]);
}
out << rasp << "\n";
}
int main()
{
citire();
rezolvare();
return 0;
}