Pagini recente » Cod sursa (job #1917698) | Cod sursa (job #1123894) | Cod sursa (job #2528802) | Cod sursa (job #1708565) | Cod sursa (job #1415770)
#include <stdio.h>
#include <stdlib.h>
int t[2001],p[2001],v[2001],f[2001],zz[2001];
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]);
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;
}