Pagini recente » Rating Ilinca Tiriblecea (Ilincat) | Cod sursa (job #3182567) | Cod sursa (job #3218927) | Cod sursa (job #1055497) | Cod sursa (job #1689441)
#include <cstdio>
#include <algorithm>
using namespace std;
const long long inf=(1LL<<60);
int n,i,j,x[205],y[205],k;
long long d[205][205], e[205][205] , stanga, dreapta, mijloc, ans;
pair<int,int> A[205];
int modul(int x)
{
if(x>0) return x;
return -x;
}
int main()
{
freopen("wanted.in", "r", stdin);
freopen("wanted.out", "w", stdout);
scanf("%d", &n);
for(i=1; i<=n; ++i) scanf("%d%d", &A[i].first, &A[i].second);
sort(A+1, A+n+1);
for(i=1; i<=n; ++i)
x[i]=A[i].first, y[i]=A[i].second;
for(i=1; i<=n+1; ++i)
{
d[i][i]=e[i][i]=y[i];
for(j=i-1; j; --j)
d[i][j]=e[i][j]=-inf;
}
for(i=n; i; --i)
for(j=i+1; j<=n; ++j)
{
d[i][j]=inf;
for(k=i; k<=j; ++k)
{
stanga= e[i][k-1] + x[k]-x[k-1] + 2*y[k] + x[k]-x[i];
dreapta= d[k+1][j] + x[k+1]-x[k] + 2*y[k] + x[k]-x[i];
d[i][j]= min(d[i][j], max( stanga, dreapta) );
}
e[i][j]=inf;
for(k=i; k<=j; ++k)
{
stanga= e[i][k-1] + x[k]-x[k-1] + 2*y[k] + x[j]-x[k];
dreapta= d[k+1][j] + x[k+1]-x[k] + 2*y[k] + x[j]-x[k];
e[i][j]= min(e[i][j], max( stanga, dreapta));
}
}
ans=inf;
for(k=1; k<=n; ++k)
ans=min( ans, modul(x[k]) + 2*y[k] + max( e[1][k-1]+x[k]-x[k-1], d[k+1][n]+x[k+1]-x[k] ) );
printf("%lld\n", ans);
return 0;
}