显示原始代码
#include <bits/stdc++.h>
using namespace std;
int T;
int arr[4][4] = {};
int k;
void swapp(int x, int y, int d) {
int t = arr[x][y];
arr[x][y] = arr[x + !d][y + d];
arr[x + !d][y + d] = arr[x + 1][y + 1];
arr[x + 1][y + 1] = arr[x + d][y + !d];
arr[x + d][y + !d] = t;
}
int dfs2(int d);
int dfs1(int d) {
if (d == k)
return 0;
int ans = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
swapp(i, j, 1);
ans = max(ans, dfs2(d) + arr[i][j] + arr[i + 1][j] + arr[i + 1][j + 1] + arr[i][j + 1]);
swapp(i, j, 0);
}
return ans;
}
int dfs2(int d) {
int ans = 1000;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
swapp(i, j, 1);
ans = min(ans, dfs1(d + 1) + arr[i][j] + arr[i + 1][j] + arr[i + 1][j + 1] + arr[i][j + 1]);
swapp(i, j, 0);
}
return ans;
}
int main() {
cin >> T;
while (T--) {
cin >> k;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
cin >> arr[i][j];
}
}
cout << dfs1(0) << endl;
}
return 0;
}