B 魔法舞会的最优搭档

注意到 ,直接暴力 DFS。遍历所有可能的组合情况找最大值。

评测记录

int A[25][25];
bool vis[25];
int ans = 0;
int N, n;

void dfs(int t, int res, int cnt) {
    for (int j = t + 1; j <= n; j++) {
        if (vis[j]) continue;
        int tr = res ^ A[t][j];
        if (cnt == N) {
            ans = max(ans, tr);
            break;
        }
        vis[j] = true;
        int k = t + 1;
        while (vis[k]) k++;
        dfs(k, tr, cnt + 1);
        vis[j] = false;
    }
}

void solve() {
    cin >> N;
    n = 2 * N;
    
    for (int i = 1; i <= n - 1; i++) {
        for (int j = i + 1; j <= n; j++) {
            cin >> A[i][j];
        }
    }
    
    vis[1] = true;
    dfs(1, 0, 1);
    
    cout << ans << "\n";
}