Pagini recente » Cod sursa (job #2738238) | Cod sursa (job #3285468) | Cod sursa (job #3200749) | Diferente pentru implica-te/arhiva-educationala intre reviziile 146 si 223 | Cod sursa (job #2990925)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <climits>
using namespace std;
ifstream in("carnati.in");
ofstream out("carnati.out");
int d[2005];
struct cel
{
int timp;
int pret;
}v[2005];
bool cmp(cel a, cel b)
{
if(a.timp==b.timp)
return a.pret<b.pret;
return a.timp<b.timp;
}
int main()
{
int n,c;
int Max=-INT_MAX;
in>>n>>c;
for(int i=1; i<=n; i++)
{
in>>v[i].timp>>v[i].pret;
}
sort(v+1, v+n+1, cmp);
v[0].timp=v[1].timp-1;
for(int i=1; i<=n; i++)
{
int x=v[i].pret;
for(int j=1; j<=n; j++)
{
if(v[j].pret>=x)
d[j]=max((d[j-1]-c*(v[j].timp-v[j-1].timp)+x),x-c);
else
d[j]=max((d[j-1]-c*(v[j].timp-v[j-1].timp)),-c);
}
int maxim=d[1];
for(int j=2; j<=n; j++)
if(maxim<d[j])
maxim=d[j];
Max=max(Max,maxim);
}
out<<Max;
return 0;
}