显示原始代码
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 10
#define INF 0x3f3f3f3f
using namespace std;
int T, K;
int a[MAX_N][MAX_N];
void rot(int x, int y, bool clock) {
int t = a[x][y];
if (clock) {
a[x][y] = a[x + 1][y];
a[x + 1][y] = a[x + 1][y + 1];
a[x + 1][y + 1] = a[x][y + 1];
a[x][y + 1] = t;
} else {
a[x][y] = 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] = t;
}
}
int getsum(int x, int y) { return a[x][y] + a[x + 1][y] + a[x][y + 1] + a[x + 1][y + 1]; }
int dfs(int step, bool who) {
if (step > K) {
return 0;
}
int ans = who ? INF : 0;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
rot(i, j, false);
int d = dfs(step + who, !who);
if (!who) {
ans = max(ans, d + getsum(i, j));
} else {
ans = min(ans, d + getsum(i, j));
}
rot(i, j, true);
}
}
return ans;
}
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d", &K);
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 4; j++) {
scanf("%d", &a[i][j]);
}
}
printf("%d\n", dfs(1, false));
}
}