子格计数: 补充解法¶
直接枚举与核对用途¶
出题人提供了逐子集枚举思路;Codex(GPT-6)整理为标准 C++17 的 brute.cpp。标准搜索见主题解。
遍历从一到 \(2^n-1\) 的每个掩码。对集合中每对不同元素检查两种运算结果是否都在集合内;缺少任意一个结果就拒绝,否则计数。对角线由幂等律自动满足,两种运算又各自交换,因此每对不同元素只检查一次即可。
每个非空子集恰好被枚举一次,检查条件正是子格的定义,所以计数正确。时间 \(O(n^2\cdot2^n)\) ,除输入运算表外只需常数辅助空间,总空间 \(O(n^2)\) .
这个实现用于理解定义和独立核对。它完成了已发布配方的全部正式输入,最慢中位数约 \(0.777\) 秒,在 \(1\) 秒时限下余量约 \(1.29\) 倍,未达到标准程序的两倍校准余量。不能据此保证它在目标评测环境通过全部输入;正式求解优先采用标准搜索或子集动态规划。