Pagini recente » Cod sursa (job #458293) | Cod sursa (job #1511449) | Cod sursa (job #1092468) | Cod sursa (job #2523558) | Cod sursa (job #205335)
Cod sursa(job #205335)
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define maxn 210
#define min(a,b) (a < b ? a : b)
#define max(a,b) (a > b ? a : b)
#define inf 2000000000
#define maxl 2
int n, sol;
int a[maxn], b[maxn], p[maxn];
int c[maxn][maxn][maxl];
int cmp(int i, int j)
{
return a[i] < a[j];
}
int main()
{
freopen("wanted.in", "r", stdin);
freopen("wanted.out", "w", stdout);
scanf("%d ", &n);
int i, x, y, k, v1, v2;
for (i=1; i<=n; i++)
{
scanf("%d %d ", &a[i], &b[i]);
p[i] = i;
}
sort(p+1, p+n+1, cmp);
for (i=1; i<=n; i++)
{
c[i][i][0] = b[p[i-1]] + b[p[i]] + a[p[i]] - a[p[i-1]];
c[i][i][1] = b[p[i]] + b[p[i+1]] + a[p[i+1]] - a[p[i]];
}
for (i=1; i<n; i++)
for (x=1; x+i<=n; x++)
{
y = x+i;
c[x][y][0] = c[x][y][1] = inf;
for (k=x; k<=y; k++)
{
if (x > 1) c[x][y][0] = min(c[x][y][0], max(c[x][k-1][1], c[k+1][y][0]) + b[p[k]] + a[p[k]] - a[p[x-1]] + b[p[x-1]]);
if (y < n) c[x][y][1] = min(c[x][y][1], max(c[x][k-1][1], c[k+1][y][0]) + b[p[k]] + a[p[y+1]] - a[p[k]] + b[p[y+1]]);
}
}
sol = inf;
for (i=1; i<=n; i++)
{
v1 = v2 = 0;
if (i>1) v1 = c[1][i-1][1];
if (i < n) v2 = c[i+1][n][0];
sol = min(sol, max(v1, v2) + b[p[i]] + abs(a[p[i]]));
}
printf("%d\n", sol);
return 0;
}