题意:
和八皇后类似,要求在不互相攻击的情况下所和达到最大
思路:
做法同八皇后,保留最大值即可。
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int chess[10][10],c[10];
int maxsum;
void search(int cur) {
if (cur == 8) {
int temp = 0;
for (int i = 0; i < 8; i++)
temp += chess[i][c[i]];
if (maxsum < temp)
maxsum = temp;
}
else {
for (int i = 0; i < 8; i++) {
int ok = 1;
c[cur] = i;
for (int j = 0; j < cur; j++) {
if (c[cur] == c[j] || cur - c[cur] == j - c[j] || cur + c[cur] == j + c[j]) {
ok = 0;
break;
}
}
if (ok)
search(cur + 1);
}
}
}
int main() {
int k;
scanf("%d", &k);
while (k--) {
memset(c, 0, sizeof(c));
maxsum = 0;
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
scanf("%d", &chess[i][j]);
search(0);
printf("%5d\n", maxsum);
}
}