跳到正文
信奥逐课

第 222 课

二进制枚举

🟠 进阶 约 10 分钟

一句话理解

二进制枚举:用 0 到 2^n-1 表示所有开关组合。

为什么要学

n≤20 的子集暴力。

讲解

for (int s=0; s<(1<<n); s++) 枚举。第 i 位表示元素 i 在不在。

比递归写起来短,调试也直观。

例子

for (int s = 0; s < (1 << n); s++) {
    for (int i = 0; i < n; i++)
        if (s >> i & 1) { /* 用 i */ }
}

外层每个子集,内层看哪些元素被选。

常见错误

练习 做完再看下一课

n 个元素的子集个数?

在线练习 C++ 在浏览器里编译,代码不会上传

Ctrl / ⌘ + Enter 运行 · Tab 缩进

输出
 

进度保存在本机浏览器里。

左右方向键也可翻课