Pagini recente » Cod sursa (job #1028512) | Cod sursa (job #837507) | Cod sursa (job #2882605) | Cod sursa (job #2170096) | Cod sursa (job #168616)
Cod sursa(job #168616)
#include<stdio.h>
#include<stdlib.h>
#define nmax 300
#define max(a,b) ((a)>(b)?(a):(b))
int pozx[nmax],pozy[nmax];
int a[nmax][nmax],b[nmax][nmax];
inline int min(int a1,int a2)
{
if( !a1 )
return a2;
if( a1< a2)
return a1;
return a2;
}
int schimb(int st,int dr)
{
int x=pozx[st];
int y=pozy[st];
while( st < dr ){
while( st < dr && pozx[dr] >= x )--dr;
pozx[st]=pozx[dr];
pozy[st]=pozy[dr];
while( st < dr && pozx[st] <= x )++st;
pozx[dr]=pozx[st];
pozy[dr]=pozy[st];
}
pozx[st]=x;
pozy[st]=y;
return st;}
void slowsort(int st,int dr)
{
if(st<dr)
{
int m=schimb(st,dr);
slowsort(st,m);
slowsort(m+1,dr);
}
}
int main()
{
freopen("wanted.in","r",stdin);
freopen("wanted.out","w",stdout);
int n,i,j,dim,k;
scanf("%d",&n);
for( i=1; i<=n; ++i)
scanf("%d %d",&pozx[i],&pozy[i]);
slowsort(1,n);
for(i=1; i<=n; ++i){
a[i][i]=pozy[i];
b[i][i]=pozy[i];
}
int aux,aux1,aux2;
for( dim=1; dim<=n; ++dim)
{
for(i=1,j=dim+1; i<=n && i+dim<=n; ++i,++j)
{
for(k=i; k<=j; ++k)
{
if(i==k)
aux1=0;
else
aux1=pozx[k]-pozx[k-1];
if(j==k)
aux2=0;
else
aux2=pozx[k+1]-pozx[k];
aux=max(b[i][k-1]+aux1,a[k+1][j]+aux2);
a[i][j]=min(a[i][j],pozx[k]-pozx[i]+2*pozy[k]+aux);
b[i][j]=min(b[i][j],pozx[j]-pozx[k]+2*pozy[k]+aux);
}
}
}
int sol=0;
i=1;
j=n;
for(k=1; k<=n; ++k)
{
if(i==k)
aux1=0;
else
aux1=pozx[k]-pozx[k-1];
if(j==k)
aux2=0;
else
aux2=pozx[k+1]-pozx[k];
aux=max(b[i][k-1]+aux1,a[k+1][j]+aux2);
sol=min(sol,abs(pozx[k])+2*pozy[k]+aux);
}
printf("%d\n",sol);
return 0;
}