状压枚举子集

状压枚举子集

状压枚举子集就是从右往左删除 1 的过程,删除一个 1 并把 1 右边的 0 变成 1

可以发现这就是状压后的数减 1,与原集合进行按位与来去掉多余的 1

例如 (10110)2(10100)2(10010)2(10000)2(110)2(100)2(10)2

code

//i为原集合,j为子集
for(int j=i;j;j=(j-1)&i)

配合状压

for(int i=1;i<(1<<n);i++){
    for(int j=i;j;j=(j-1)&i);
}

时间复杂度

O(ni=1(ni)2ni)=O(3n)

posted @   muzqingt  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示