Pagini recente » Cod sursa (job #1396715) | Cod sursa (job #2919322) | Cod sursa (job #909270) | Cod sursa (job #2304309) | Cod sursa (job #2924598)
#include <fstream>
using namespace std;
ifstream in ("bibel.in");
ofstream out ("bibel.out");
const int max_size = 19, max_c = (1 << 19) + 1;
const long long INF = 1e18 + 1;
struct str{
int x, y;
};
str v[max_size], vv[max_size];
long long dp[max_c][max_size], ind[max_size], px[max_size], k, p;
long long d (str x, str y)
{
return 1LL * (x.x - y.x) * (x.x - y.x) * (x.y - y.y) * (x.y - y.y);
}
int main ()
{
p = 1;
int op;
while (in >> op)
{
if (op == 0)
{
int x, y;
in >> x >> y;
v[++k] = {x, y};
}
if (op == 1)
{
for (int i = 1; i <= k; i++)
{
ind[i] = INF;
}
for (int i = 1; i <= p; i++)
{
for (int j = 1; j <= k; j++)
{
ind[j] = min(ind[j], px[i] + d(v[j], vv[i]));
}
}
for (int st = 1; st < (1 << k); st++)
{
for (int j = 1; j <= k; j++)
{
dp[st][j] = INF;
}
}
for (int i = 1; i <= k; i++)
{
dp[(1 << (i - 1))][i] = ind[i];
}
for (int st = 1; st < (1 << k); st++)
{
for (int i = 1; i <= k; i++)
{
if (st & (1 << (i - 1)))
{
for (int j = 1; j <= k; j++)
{
if (((1 << (j - 1)) & st) == 0)
{
dp[st + (1 << (j - 1))][j] = min(dp[st + (1 << (j - 1))][j], dp[st][i] + d(v[i], v[j]));
}
}
}
}
}
long long ans = INF;
for (int i = 1; i <= k; i++)
{
px[i] = dp[(1 << k) - 1][i];
ans = min(ans, px[i]);
}
for (int i = 1; i <= k; i++)
{
vv[i] = v[i];
}
out << ans << '\n';
p = k;
k = 0;
}
}
in.close();
out.close();
return 0;
}