#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("wanted.in");
ofstream g("wanted.out");
#define pb push_back
#define sz size
#define mp make_pair
#define nmax 201
#define inf (1<<29)
int n;
pair<int,int> v[nmax];
int dp[nmax][nmax][2];
void citeste(){
f >> n;
for(int i=1; i<=n; ++i){
int x, y; f >> x >> y;
v[i] = mp(x, y);
}
}
int modul(int X){
if (X < 0) return -X;
return X;
}
int dist(pair<int,int> A, pair<int,int> B){
return B.second + modul(A.first - B.first) + A.second;
}
int rezolva(int Left, int Right, pair<int,int> t, int xx, int side){
if (dp[Left][Right][side] != inf) return dp[Left][Right][side];
if (Left >= Right){
if (Left > Right) return 0;
return dist( mp(v[Left].first, v[Left].second), t );
}
//cout << Left << " " << Right << "\n";
int Min = inf; int oras = -1; pair<int, int> x;
for(int k=Left; k<=Right; ++k){
int A = dist(t, mp(v[k].first, v[k].second) ) + rezolva(Left, k-1, mp(v[k].first, v[k].second), k, 0);// 0 pt left
int B = dist(t, mp(v[k].first, v[k].second) ) + rezolva(k+1, Right, mp(v[k].first, v[k].second), k, 1);
//if (dp[Left][k-1] != inf) A += dp[Left[k-1];
///Min = min(Min, max(A, B) );
if (Min > max(A,B)){
Min = max(A,B);
oras = k;
if (A > B) x = mp(Left, k-1);
else x = mp(k+1, Right);
}
}
//g << Left << " " << Right << " " << Min<<" orasul in care ma duc: " <<oras << " si vin din : " << xx<< " intervalul ales : " << x.first << " " << x.second << "\n";// << " " << dist(t, mp(v[oras].first, v[oras].second)) << " " << t.first << " " << t.second <<"\n";
dp[Left][Right][side] = Min;
return Min;
}
int main(){
pair<int, int> start = mp(0, 0);
citeste();
sort(v+1, v+n+1);
for(int i=0; i<=n; ++i) for(int j=0; j<=n; ++j) dp[i][j][1] = dp[i][j][0] = inf;
g << rezolva(1, n, start, 0, 0) << "\n";
f.close();
g.close();
return 0;
}