CODE:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define MAXN    8

int G[MAXN][MAXN];
int A[MAXN];
bool vis[3][MAXN*2];
int ans;

void dfs(int n, int cur = 0)
{
    if(cur == n)
    {
        int tot = 0;
        for(int i = 0; i < n; i++) tot += G[i][A[i]];
        if(tot > ans) ans = tot;
    }
    else for(int i = 0; i < 8; i++)
    {
        A[cur] = i;
        if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+n])
        {
            vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 1;
            dfs(n, cur+1);
            vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 0;
        }
    }
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        ans = 0;
        memset(vis, 0sizeof(vis));
        for(int i = 0; i < 64; i++) scanf("%d", &G[i/8][i%8]);
        dfs(8);
        printf("%5d\n", ans);
    }
    return 0;
}

 

 

posted on 2012-10-09 21:10  有间博客  阅读(130)  评论(0编辑  收藏  举报