Pagini recente » Cod sursa (job #1848633) | Cod sursa (job #1763031) | Cod sursa (job #1664745) | Cod sursa (job #3246158) | Cod sursa (job #488147)
Cod sursa(job #488147)
#include <stdio.h>
#include <algorithm>
#define Nmax 202
#define INF 2147000000
using namespace std;
struct punct { int x,y; } P[Nmax];
int a[Nmax][Nmax],b[Nmax][Nmax];
int N;
inline int cmp(punct a, punct b){
return a.x < b.x;
}
inline int Minim(int x,int y){ return x<y ? x:y; }
inline int Maxim(int x,int y){ return x>y ? x:y; }
inline int Abs(int x){ return x>0 ? x:-x; }
inline int dist(int i,int j){
return Abs(P[i].x-P[j].x)+P[i].y+P[j].y;
}
int main(){
int i,j,k,rez,lg;
freopen("wanted.in","r",stdin);
freopen("wanted.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;++i) scanf("%d%d",&P[i].x,&P[i].y);
sort(P+1,P+N+1,cmp);
for(i=2;i<=N;++i) a[i][i]=dist(i-1,i);
for(i=1;i<N;++i) b[i][i]=dist(i,i+1);
for(lg=2; lg<=N; ++lg)
for(i=1;i+lg-1<=N;++i){
j=i+lg-1;
a[i][j]=b[i][j]=INF;
if( i>1 )
for(k=i; k<=j; ++k)
a[i][j]=Minim(a[i][j], Maxim(b[i][k-1],a[k+1][j]) + dist(i-1,k));
if( j<N )
for(k=i; k<=j; ++k)
b[i][j]=Minim(b[i][j], Maxim(b[i][k-1],a[k+1][j]) + dist(k,j+1));
}
rez=INF;
for(k=1;k<=N;++k)
rez=Minim(rez,Maxim(b[1][k-1],a[k+1][N])+dist(0,k));
printf("%d\n",rez);
fclose(stdin); fclose(stdout);
return 0;
}