LuoguP7859 [COCI2015-2016#2] GEPPETTO 题解
Content
有 \(n\) 个数 \(1\sim n\)。你需要在其中选若干个数。但是还有 \(m\) 个限制,第 \(i\) 个限制格式为 \(a_i\) 不能和 \(b_i\) 一起选。问你一共有多少种选法。
数据范围:\(1\leqslant n\leqslant 20\),\(1\leqslant m\leqslant 400\),\(1\leqslant a_i,b_i\leqslant n\),\(a_i\neq b_i\)。
Solution
不多说,上来直接暴搜。枚举所有可能的 \(2^n\) 种情况,然后一个一个限制判断是否合法统计答案即可。理论上来说复杂度为 \(\mathcal O(2^n m)\),但是由于很多种选法都没法枚举到 \(m\) 种,因此实际复杂度远远达不到这么高。
Code
namespace Solution {
int n, m, ans, a[407], b[407], in[27];
iv dfs(int x) {
if(x > n) {
int fl = 1;
F(int, i, 1, m) if(in[a[i]] && in[b[i]]) {fl = 0; break;}
ans += fl; return;
}
in[x] = 1, dfs(x + 1), in[x] = 0, dfs(x + 1);
}
iv Main() {
read(n, m);
F(int, i, 1, m) read(a[i], b[i]);
dfs(1), write(ans);
}
}

浙公网安备 33010602011771号