八皇后问题的变形,每个格子增加了分值,看起来有点像去年NOIP的第四题-.- 把lrj书上的标程改了一下,一开始没注意到输出格式,后来才发现ans没初始化...UVa总是能体现相当多的细节问题. 这里有一些数据. [Code] #include<iostream> using namespace std; int C[50], vis[3][50], val[10][10] = {0}, ans = 0; void search(int cur) { if(cur == 8) { int tmp = 0; for (int i = 0; i < 8; i++) tmp += val[i][C[i]]; if (tmp > ans) ans = tmp; } else for(int i = 0; i < 8; i++) { if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+8]) { C[cur] = i; vis[0][i] = vis[1][cur+i] = vis[2][cur-i+8] = 1; search(cur+1); vis[0][i] = vis[1][cur+i] = vis[2][cur-i+8] = 0; } } } int main() { int n, i, j; cin >> n; while(n) { ans = 0; for (i = 0; i < 8; i++) for (j = 0; j < 8; j++) cin >> val[j][i]; memset(vis, 0, sizeof(vis)); search(0); n--; printf("%5d/n", ans); } }