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";
}

京公网安备 11010502036488号