Pagini recente » Cod sursa (job #2709778) | Cod sursa (job #2334781) | Cod sursa (job #658446) | Cod sursa (job #547797) | Cod sursa (job #168149)
Cod sursa(job #168149)
#include <stdio.h>
#include <algorithm>
const long long inf = 2000000001;
#define x first
#define y second
using namespace std;
int n;
long long a[201][201], b[201][201];
pair<long long, long long> p[210];
long long max(long long a, long long b)
{
if(a > b)
return a;
return b;
}
long long modul(long long a)
{
if(a < 0)
return -a;
return a;
}
int main()
{
freopen("wanted.in", "r", stdin);
freopen("wanted.out", "w", stdout);
int i, d, j, k;
long long min, sol, temp;
scanf("%d", &n);
for(i = 1; i <= n; ++i)
{
scanf("%lld %lld", &p[i].x, &p[i].y);
}
sort(p + 1, p + n + 1);
for(i = 1; i <= n; ++i)
{
a[i][i] = b[i][i] = p[i].y;
}
for(d = 1; d < n; ++d)
{
for(i = 1; i + d <= n; ++i)
{
min = 2 * p[i].y + p[i + 1].x - p[i].x + a[i + 1][i + d];
for(j = 1; j < d; ++j)
{
temp = 2 * p[i + j].y + p[i + j].x - p[i].x + max(p[i + j + 1].x - p[i + j].x + a[i + j + 1][i + d], p[i + j].x - p[i + j - 1].x + b[i][i + j - 1]);
if(min > temp)
{
min = temp;
}
}
temp = 2 * p[i + d].y + p[i + d].x - p[i + d - 1].x + p[i + d].x - p[i].x + b[i][i + d - 1];
if(min > temp)
{
min = temp;
}
a[i][i + d] = min;
min = 2 * p[i + d].y + p[i + d].x - p[i + d - 1].x + b[i][i + d - 1];
for(j = d - 1; j > 0; --j)
{
temp = 2 * p[i + j].y + p[i + d].x - p[i + j].x + max(p[i + j].x - p[i + j - 1].x + b[i][i + j - 1], p[i + j + 1].x - p[i + j].x + a[i + j + 1][i + d]);
if(min > temp)
{
min = temp;
}
}
temp = 2 * p[i].y + p[i + d].x - p[i].x + p[i + 1].x - p[i].x + a[i + 1][i + d];
if(min > temp)
{
min = temp;
}
b[i][i + d] = min;
//printf("%d %d %lld %lld\n", i, i + d, a[i][i + d], b[i][i + d]);
}
}
//printf("\n");
sol = inf;
for(i = 1; i <= n; ++i)
{
//printf("%lld %lld %lld\n", b[1][i], a[i][n], modul(p[i].x));
if(sol > max(b[1][i - 1] + 2 * p[i].y + p[i].x - p[i - 1].x, 2 * p[i].y + p[i + 1].x - p[i].x + a[i + 1][n]) + modul(p[i].x))
{
sol = max(b[1][i - 1] + 2 * p[i].y + p[i].x - p[i - 1].x, 2 * p[i].y + p[i + 1].x - p[i].x + a[i + 1][n]) + modul(p[i].x);
}
}
printf("%lld\n", sol);
return 0;
}