Pagini recente » Cod sursa (job #978184) | Cod sursa (job #434811) | Cod sursa (job #989186) | Cod sursa (job #584978) | Cod sursa (job #638500)
Cod sursa(job #638500)
# include <algorithm>
# include <cstdio>
# include <cstring>
typedef long long ll;
const char *FIN = "portal3.in", *FOU = "portal3.out";
const int MAX = 10;
struct vec {
int x1, y1, c;
} ;
vec E[MAX][2];
int N, M, T, S[MAX];
ll min;
bool V[MAX];
void solve (int P) {
int x = 0, y = 0;
ll nr = 0;
for (int i = 1; i <= P; ++i) {
int poz = (S[i] - 1) >> 1, rest = (S[i] - 1) & 1;
int x1 = E[poz][rest].x1, y1 = E[poz][rest].y1;
nr += (ll) (abs (x1 - x) + abs (y1 - y) + E[poz][0].c);
x = E[poz][rest ^ 1].x1, y = E[poz][rest ^ 1].y1;
}
if (min > (nr += (ll) (abs (x - N) + abs (y - M)))) min = nr;
}
void back (int N, int P, int K) {
if (K != 0)
solve (K);
if (K < P)
for (int i = 1; i <= N; ++i)
if (V[i] == 0)
V[i] = 1, S[K + 1] = i, back (N, P, K + 1), V[i] = 0;
}
int main (void) {
freopen (FIN, "r", stdin);
freopen (FOU, "w", stdout);
for (scanf ("%d", &T); T; --T) {
scanf ("%d %d", &N, &M);
for (int i = 0; i < 3; ++i)
scanf ("%d %d %d %d %d", &E[i][0].x1, &E[i][0].y1, &E[i][1].x1, &E[i][1].y1, &E[i][0].c);
min = N + M, back (6, 3, 0);
printf ("%lld\n", min);
memset (V, 0, sizeof (V)), memset (S, 0, sizeof (S));
}
}