Pagini recente » Clasament oji__sim | Cod sursa (job #2470095) | Cod sursa (job #1917129) | Cod sursa (job #403695) | Cod sursa (job #479983)
Cod sursa(job #479983)
#include <stdio.h>
#define NMax 2000
const char IN[] ="carnati.in";
const char OUT[] ="carnati.out";
int N,C;
int a[2][NMax],v[2][NMax];
struct client
{int t,p;
} c[NMax];
int abs(int x)
{
return (x<0) ? -x : x;
}
int pd()
{
int i,j,t,max;
max=0;
for (i=0;i<N;i++)
a[1][i]= c[i].p - C,
v[1][i]= c[i].p,
max= (a[1][i]>max) ? a[1][i] : max;
int p[2];
p[0]=0,p[1]=1;
t=0;
for (j=2;j<=N;j++)
{
for (i=0;i+j-1<N;i++)
{
int x,y;
x=a[p[1]][i+1] - abs(c[i].t-c[i+1].t)*C;
x+= (v[p[1]][i+1]<=c[i].p) ? v[p[1]][i+1] : 0;
y=a[p[1]][i] - abs(c[i+t+1].t-c[i].t)*C;
y+= (v[p[1]][i]<=c[i+t+1].p) ? v[p[1]][i] : 0;
if (x>y)
a[p[0]][i]= x,
v[p[0]][i]= v[p[1]][i+1];
else
a[p[0]][i]=y,
v[p[0]][i]= v[p[1]][i];
a[p[1]][i]=0;
max= (a[p[0]][i]>max) ? a[p[0]][i] : max;
}
int tmp= p[0];
p[0]=p[1];
p[1]=tmp;
t++;
}
return max;
}
void citire()
{
int i;
freopen(IN,"r",stdin);
scanf("%d%d",&N,&C);
for (i=0;i<N;i++)
scanf("%d%d",&c[i].t,&c[i].p);
fclose(stdin);
}
void scriere(int x)
{
freopen(OUT,"w",stdout);
printf("%d\n",x);
fclose(stdout);
}
void sort(client a[])
{
int i,j;
for (i=0;i<N;i++)
{
int p=i;
for (j=i+1;j<N;j++)
if ( a[j].t<a[p].t || (a[j].t==a[p].t && a[j].p<a[p].p))
p=j;
if (i!=p)
{
client tmp= a[i];
a[i]=a[p];
a[p]=tmp;
}
}
}
int main()
{
citire();
sort(c);
scriere(pd());
return 0;
}