1 条题解
-
0
文字教学
用DFS(深度优先搜索)枚举所有选人的可能性,对每个人做“选”或“不选”的决策:
- 递归参数:
idx表示当前处理到第idx个人,val表示当前已选人的能力异或值。 - 边界条件:当
idx == n时,用val更新最大得分ans,然后返回。 - 递归过程:
- 不选第
idx个人:直接递归到idx+1,val不变; - 选第
idx个人:递归到idx+1,val异或上第idx个人的能力值。
- 不选第
- 因为 ,总共有 万种状态,DFS完全可以通过。
代码
#include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; ull a[25], ans; int n, k; void dfs(int idx, ull val) { if (idx == n) { if (val > ans) ans = val; return; } dfs(idx + 1, val); // 不选第idx个人 dfs(idx + 1, val ^ a[idx]); // 选第idx个人 } int main() { cin >> n >> k; for (int i = 0; i < n; ++i) { int c; cin >> c; a[i] = 0; for (int j = 0; j < c; ++j) { int x; cin >> x; a[i] |= 1ULL << (k - x); } } ans = 0; dfs(0, 0); cout << ans << endl; return 0; } - 递归参数:
- 1
信息
- ID
- 7314
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者
京公网安备 11011102002149号