Pagini recente » Cod sursa (job #2866079) | Cod sursa (job #745684) | Cod sursa (job #2314047) | Cod sursa (job #1534190) | Cod sursa (job #2380290)
#include <bits/stdc++.h>
#define Dim 2004
using namespace std;
ifstream f("carnati.in");
ofstream g("carnati.out");
long N,C,ras,Ans[Dim];
int ID[Dim],Minim[Dim],People[Dim];
struct point { int time,pay; } V[Dim];
bool cmp(point X,point Y)
{
if(X.time<Y.time) return 1;
else return 0;
}
int main()
{
f>>N>>C;
for(int i=1;i<=N;i++) f>>V[i].time>>V[i].pay;
sort(V+1,V+N+1,cmp);
for(int i=1;i<=N;i++)
{
Minim[i]=V[i].pay;
ID[i]=i;
Ans[i]=Minim[i]-C;
People[i]=1;
for(int j=i-1;j>=1;j--)
{
bool ok=1;
if(V[i].pay>=Minim[j])
{
long rez=Ans[j]+Minim[j]-C*(V[i].time-V[j].time);
//cout<<i<<" "<<j<<" "<<Minim[j]<<" "<<ID[j]<<" "<<V[i].pay<<" "<<rez<<" "<<Ans[i]<<'\n';
if(rez>=Ans[i])
{
ok=0;
Ans[i]=rez;
ID[i]=ID[j];
Minim[i]=Minim[j];
People[i]=People[j]+1;
}
}
else
{
int yup=V[i].pay;
long rez=yup*People[j]+yup-C*(V[i].time-V[j].time)-C*(V[j].time-V[ID[j]].time+1);
if(rez>=Ans[i])
{
ok=0;
Ans[i]=rez;
ID[i]=ID[j];
Minim[i]=yup;
People[i]=People[j]+1;
}
}
}
}
//cout<<'\n'<<'\n';
for(int i=1;i<=N;i++)
{
ras=max(ras,Ans[i]);
//cout<<i<<" "<<Ans[i]<<'\n';
}
g<<ras;
return 0;
}