关于二进制枚举子集

mac2024-10-30  14

例子: 无事街上走,提壶去打酒. 逢店加一倍,逢花喝一斗. 这一路上,遇到店5次,遇到花10次,最后一次遇到花,他正好吧酒喝完,问有多少种可能!!

#include<bits/stdc++.h> using namespace std; int main() { int ans = 0; for (int i = 0; i < (1<<14); ++i) { int tot_1 = 0; int tot_0 = 0; int num = 2; for (int j = 0; j < 14; ++j) { if (i&(1 << j)) { // 这里判断二进制 i 从右数第 j + 1 位是否为 1 tot_1++; num = num * 2; } else { tot_0++; num = num - 1; } } if (tot_1 == 5 && tot_0 == 9 && num == 1) { ++ans; // 记录合法方案数 } } cout<<ans; return 0; }

太强了,第一次看到这种枚举法,突然发现在计算机这片土壤上,充满这无数的可能性!!

最新回复(0)