Pagini recente » Cod sursa (job #163016) | Cod sursa (job #2383089) | Cod sursa (job #1411640) | Cod sursa (job #687555) | Cod sursa (job #1750671)
#include <algorithm>
#include <fstream>
using namespace std;
ifstream fin("wanted.in");
ofstream fout("wanted.out");
const int inf= 1<<30;
const int nmax= 200;
struct str {
int x, y;
};
int d1[nmax+1][nmax+1], d2[nmax+1][nmax+1], x[nmax+1][nmax+1];
str v[nmax+1];
int d( int i, int j ) {
return -v[i].x+v[i].y+v[j].x+v[j].y;
}
bool cmp( str x, str y ) {
return x.x<y.x;
}
void f( int i, int j ) {
if ( x[i][j]==0 ) {
x[i][j]= 1;
for ( int k= i; k<=j; ++k ) {
f(i, k-1);
f(k+1, j);
d1[i][j]= min(d1[i][j], d(i-1, k)+max(d1[k+1][j], d2[i][k-1]));
d2[i][j]= min(d2[i][j], d(k, j+1)+max(d1[k+1][j], d2[i][k-1]));
}
}
}
int main( ) {
int n;
fin>>n;
for ( int i= 1; i<=n; ++i ) {
fin>>v[i].x>>v[i].y;
}
sort( v+1, v+n+1, cmp );
for ( int i= 1; i<=n; ++i ) {
for ( int j= i; j<=n; ++j ) {
d1[i][j]= d2[i][j]= inf;
}
}
f(1, n);
int sol= inf;
for ( int i= 1; i<=n; ++i ) {
sol= min(sol, max(v[i].x, -v[i].x)+v[i].y+max(d1[i+1][n], d2[1][i-1]));
}
fout<<sol<<"\n";
return 0;
}