返回信息流如题,例如8位二进制,找出3个1的所有组合。
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #98410同步于 2019/9/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【求助】怎么快速找到n位二进制中m个1的所有组合情况,非暴力
a5530860
2019/9/27镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
比如8位中只有一个1,则有8种情况,00000001,00000010等等。固定长度和固定1的个数,快去得到所有组合情况。
【 在 zhxiao (zxiao) 的大作中提到: 】
: 能再详细描述一下问题吗?
情况个数是这样,但是想快速得到这些序列。
【 在 boke1208 (福莱||纸鹅的小弟) 的大作中提到: 】
: c(n,m)吗。。。ps这回答和骂人一样
考虑爆搜的时候,某种情况的终止条件就是前面已经处理的位上已经填了m个1,这时后面都填0,然后把这种方案存下来就可以。考虑一下递归过程,复杂度应该是接近O(方案数*n)的
n位选k的子集。ref:挑战程序设计竞赛
int comb = (1<<k) - 1;
while(comb < 1<<n)
{
//在这里进行针对组合的处理
int x = comb & -comb, y = comb + x;
comb = ((comb & -y) / x >> 1) | y;
}