显示原始代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void tran(ll a[][4], ll x, ll y) {
ll temp;
temp = a[x][y + 1];
a[x][y + 1] = a[x + 1][y + 1];
a[x + 1][y + 1] = a[x + 1][y];
a[x + 1][y] = a[x][y];
a[x][y] = temp;
}
ll win(ll a[][4], ll k) {
ll i = 0, j = 0, ii = 0, jj = 0;
ll b[4][4], c[4][4], d[4][4], sum, s = 0, ss = 0, s1 = 0, s2 = 0, s22 = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (a[i][j] < sum)
sum = a[i][j];
}
}
sum = 8 * k * sum;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
b[i][j] = a[i][j];
}
}
if (k == 1) {
for (i = 0; i < 9; i++) {
for (ii = 0; ii < 4; ii++) {
for (jj = 0; jj < 4; jj++) {
a[ii][jj] = b[ii][jj];
}
}
s1 = a[i / 3][i % 3] + a[i / 3][i % 3 + 1] + a[i / 3 + 1][i % 3] + a[i / 3 + 1][i % 3 + 1];
tran(a, i / 3, i % 3);
s22 = a[0][0] + a[0][1] + a[1][0] + a[1][1];
for (j = 0; j < 9; j++) {
s2 = a[j / 3][j % 3] + a[j / 3][j % 3 + 1] + a[j / 3 + 1][j % 3] + a[j / 3 + 1][j % 3 + 1];
if (s2 < s22)
s22 = s2;
}
s = s1 + s22;
if (s > sum)
sum = s;
}
return sum;
} else {
for (i = 0; i < 9; i++) {
for (ii = 0; ii < 4; ii++) {
for (jj = 0; jj < 4; jj++) {
a[ii][jj] = b[ii][jj];
}
}
s1 = a[i / 3][i % 3] + a[i / 3][i % 3 + 1] + a[i / 3 + 1][i % 3] + a[i / 3 + 1][i % 3 + 1];
tran(a, i / 3, i % 3);
for (ii = 0; ii < 4; ii++) {
for (jj = 0; jj < 4; jj++) {
c[ii][jj] = a[ii][jj];
}
}
s22 = a[0][0] + a[0][1] + a[1][0] + a[1][1] + win(a, k - 1);
for (j = 0; j < 9; j++)
{
for (ii = 0; ii < 4; ii++) {
for (jj = 0; jj < 4; jj++) {
a[ii][jj] = c[ii][jj];
}
}
s2 = a[j / 3][j % 3] + a[j / 3][j % 3 + 1] + a[j / 3 + 1][j % 3] + a[j / 3 + 1][j % 3 + 1];
tran(a, j / 3, j % 3);
s2 = s2 + win(a, k - 1);
if (s2 < s22) {
s22 = s2;
}
}
s = s1 + s22;
if (s > sum)
{
sum = s;
}
}
return sum;
}
}
int main() {
ll T, k[205], y, i, j;
cin >> T;
ll a[T][4][4];
for (y = 0; y < T; y++) {
cin >> k[y];
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) cin >> a[y][i][j];
}
}
for (y = 0; y < T - 1; y++) {
cout << win(a[y], k[y]) << endl;
}
cout << win(a[T - 1], k[y]);
return 0;
}