Pagini recente » Cod sursa (job #2694662) | Cod sursa (job #2661066) | Cod sursa (job #1926598) | Cod sursa (job #2645927) | Cod sursa (job #479428)
Cod sursa(job #479428)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define inf 2000000000
struct segm
{
int x, y;
};
int n, st[202][202], dr[202][202];
segm v[202];
inline int min (int a, int b) {return a < b ? a : b;}
inline int max (int a, int b) {return a > b ? a : b;}
inline int abs (int a) {return a < 0 ? -a : a;}
inline int cmp (segm a, segm b)
{
if (a.x != b.x)
return a.x < b.x;
return a.y < b.y;
}
int main ()
{
freopen ("wanted.in", "r", stdin);
freopen ("wanted.out", "w", stdout);
int i, j, k, l;
scanf ("%d", &n);
for (i = 1; i <= n; i ++)
scanf ("%d %d", &v[i].x, &v[i].y);
sort (v + 1, v + n + 1, cmp);
for (l = 1; l <= n; l ++)
for (i = 1; i <= n - l + 1; i ++)
{
j = i + l - 1;
st[i][j] = dr[i][j] = inf;
for (k = i; k <= j; k ++)
{
st[i][j] = min (st[i][j], max (dr[i][k - 1], st[k + 1][j]) + v[k].y + v[i - 1].y + (v[k].x - v[i - 1].x));
dr[i][j] = min (dr[i][j], max (dr[i][k - 1], st[k + 1][j]) + v[k].y + v[j + 1].y + (v[j + 1].x - v[k].x));
}
}
int sol = inf;
for (i = 1; i <= n; i ++)
sol = min (sol, max (dr[1][i - 1], st[i + 1][n]) + v[i].y + abs (v[i].x));
printf ("%d\n", sol);
return 0;
}