Pagini recente » Cod sursa (job #961138) | Cod sursa (job #2950702) | Cod sursa (job #283598) | Cod sursa (job #3291056) | Cod sursa (job #2405949)
#include <iostream>
#include <fstream>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("wanted.in");
ofstream fout("wanted.out");
int d[205][205][5];
struct gigi
{
int x, y;
}v[205];
int comp(gigi a, gigi b)
{
return a.x < b.x;
}
int nuj(int st, int dr, int dir)
{
if (st > dr)
return 0;
if (d[st][dr][dir] == INT_MAX)
for (int i = st; i <= dr; i++)
{
int x = max(nuj(st, i - 1, 1), nuj(i + 1, dr, 0));
if (dir == 0)
d[st][dr][0] = min(d[st][dr][0], x + v[st - 1].y + v[i].y + abs(v[i].x - v[st - 1].x));
else
d[st][dr][1] = min(d[st][dr][1], x + v[dr + 1].y + v[i].y + abs(v[dr + 1].x - v[i].x));
}
return d[st][dr][dir];
}
int main()
{
int n;
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i].x >> v[i].y;
sort(v + 1, v + n + 1, comp);
for (int i = 0; i <= n; i++)
for (int j = 0; j <= n; j++)
{
d[i][j][0] = INT_MAX;
d[i][j][1] = INT_MAX;
}
fout << nuj(1, n, 0) << '\n';
return 0;
}