// UVa 10911 - Forming Quiz Teams
#include <iostream>
#include <string.h>
#include <cmath>
#include <float.h>
#include <stdio.h>
using namespace std;
#define datatype unsigned long long int
int n;
double T[65536];
double x[16], y[16];
double oo = DBL_MAX;
double D[16][16];
double calc(datatype config) {
if (T[config] != oo)
return T[config];
for (int i = 0; i < n; i++)
if ((config >> i) % 2 == 1)
for (int j = i + 1; j < n; j++)
if ((config >> j) % 2 == 1) {
datatype child = config - (1 << i) - (1 << j);
double child_cost = calc(child) + D[i][j];
if (T[config] > child_cost)
T[config] = child_cost;
}
return T[config];
}
int main() {
datatype power[16];
power[0] = 1;
for (int i = 1; i <= 16; i++)
power[i] = power[i - 1] * 2;
cin >> n;
int cases = 0;
while (n) {
cases++;
n = n * 2;
string name;
for (int i = 0; i < n; i++)
cin >> name >> x[i] >> y[i];
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
D[i][j] = pow((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]), 0.5);
T[0] = 0;
for (datatype c = 1; c < power[n]; c++)
T[c] = oo;
calc(power[n] - 1);
printf("Case %d: %.2f\n", cases, T[power[n] - 1]);
cin >> n;
}
return 0;
}
Thursday, October 8, 2015
UVa 10911 - Forming Quiz Teams
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment