Pagini recente » Cod sursa (job #680615) | Cod sursa (job #998302) | Cod sursa (job #178931) | Cod sursa (job #77442) | Cod sursa (job #613413)
Cod sursa(job #613413)
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <utility>
using namespace std;
#define x first
#define y second
const int INF = (1LL << 31) - 1LL;
int N;
pair<int, int> V[202];
int minC[2][202][202];
inline int iabs(int x)
{
return x < 0 ? -x : x;
}
int main()
{
ifstream fin("wanted.in");
ofstream fout("wanted.out");
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> V[i].x >> V[i].y;
for (int s = 1; s <= N; ++s)
for (int i = 1; i <= N - s + 1; ++i)
{
minC[0][i][i + s - 1] = minC[1][i][i + s - 1] = INF;
for (int j = i; j <= i + s - 1; ++j) // pivotul
{
minC[0][i][i + s - 1] = min(minC[0][i][i + s - 1], iabs(V[j].x - V[i - 1].x) + iabs(V[j].y) + iabs(V[i - 1].y) + max(minC[1][i][j - 1], minC[0][j + 1][i + s - 1]));
if (i + s - 1 != N)
minC[1][i][i + s - 1] = min(minC[1][i][i + s - 1], iabs(V[j].x - V[i + s].x) + iabs(V[j].y) + iabs(V[i + s].y) + max(minC[1][i][j - 1], minC[0][j + 1][i + s - 1]));
}
}
fout << minC[0][1][N];
fin.close();
fout.close();
}