Pagini recente » Cod sursa (job #2088031) | Cod sursa (job #864993) | Cod sursa (job #908398) | Cod sursa (job #2130399) | Cod sursa (job #493647)
Cod sursa(job #493647)
#include <cstdio>
#include <algorithm>
using namespace std;
#define nmax 210
struct punct
{
int x, y;
} v[nmax];
int cmp(punct a, punct b)
{
return a.x<b.x;
}
int n, a[nmax][nmax], b[nmax][nmax], sol;
char f[nmax][nmax];
int dist(int p, int d)
{
if (p==d) return 0;
return v[p].y+v[d].y+v[d].x-v[p].x;
}
void solve(int p, int d)
{
if (f[p][d]) return ;
f[p][d]=1;
int i, c;
for (i=p; i<=d; i++)
{
solve(p,i-1);
solve(i+1,d);
c=max(b[p][i-1], a[i+1][d]);
a[p][d]=min(a[p][d], c+dist(p-1, i));
b[p][d]=min(b[p][d], c+dist(i, d+1));
}
}
int main()
{
freopen("wanted.in","r",stdin);
freopen("wanted.out","w",stdout);
scanf("%d",&n);
int i, c, j;
for (i=1; i<=n; i++) scanf("%d %d",&v[i].x,&v[i].y);
sort (v+1, v+n+1, cmp);
v[n+1].y=v[0].y=1<<30;
for (i=1; i<=n; i++)
for (j=i; j<=n; j++)
a[i][j]=b[i][j]=1<<30;
solve(1,n);
sol=1<<30;
for (i=1; i<=n; i++)
{
j=v[i].x;
if (j<0) j=-j;
j+=v[i].y;
c=j+max(b[1][i-1], a[i+1][n]);
sol=min(sol, c);
}
printf("%d\n",sol);
}