Pagini recente » Cod sursa (job #2210970) | Cod sursa (job #1147609) | Cod sursa (job #2652829) | Cod sursa (job #1268695) | Cod sursa (job #1415791)
#include <stdio.h>
#include <stdlib.h>
int t[2001],p[2001],v[2001],f[2001],zz[2001];
void quicksort(int p,int u,int po[])
{
int pivot,j,i,aux;
if(p<u)
{
pivot=t[(p+u)/2];
i=p;
j=u;
while(i<=j)
{
while(t[i]<pivot && i<u)
i++;
while(t[j]>pivot && j>p)
j--;
if(i<=j){
aux=t[i];
t[i]=t[j];
t[j]=aux;
aux=po[i];
po[i]=po[j];
po[j]=aux;
i++;
j--;
}
}
if(p<j)
quicksort(p,j,po);
if(i<u)
quicksort(i,u,po);
}
}
int functie(int i,int j)
{
int m,max=0,sum=0;
for(m=j; m>=i; m--)
if(p[m]>=p[j])
sum+=p[j];
if(sum>=zz[j-1]+f[j-1]*(p[j]>=f[j-1]))
{
max=sum;
f[j]=p[j];
}
else
{
max=zz[j-1]+f[j-1]*(p[j]>=f[j-1]);
f[j]=f[j-1];
}
return max;
}
int main()
{
int i,n,max,z,c;
freopen("carnati.in","r",stdin);
freopen("carnati.out","w",stdout);
scanf("%d%d",&n,&c);
for(i=1; i<=n; i++)
scanf("%d%d",&t[i],&p[i]);
quicksort(1,n,p);
max=p[1]-c;
v[1]=1;
f[1]=p[1];
zz[1]=p[1];
for(i=2; i<=n; i++)
{
z=functie(v[i-1],i);
if(p[i]-c<=z-c*(t[i]-t[v[i-1]]+1)){
v[i]=v[i-1];
zz[i]=z;
if(z-c*(t[i]-t[v[i-1]]+1)>max)
max=z-c*(t[i]-t[v[i-1]]+1);
}
else
{
v[i]=i;
f[i]=p[i];
if(p[i]-c>max)
max=p[i]-c;
}
}
printf("%d\n",max);
return 0;
}