【二进制枚举】计蒜客:李白打酒_二进制

一共有多少种情况?

初始为2,遇到店乘以2,遇到花减1

最后一次遇到的是花,前面十四次遇到店4次,遇到花9次。且十四次后酒剩一斗。

二进制枚举:

用1表示店,0表示花,那么这个过程可以用一个14位二进制数可以表示。

for(int i=0;i<(1<<14);i++){
     for(int j=0;j<14;j++){
           if(i&(1<<j)){
             //判断第j位是否为1
           } 
     } 
}

代码:

#include<iostream>
#include<cstring>
using namespace std;
int bit[15];
bool check(){
	int n=2;
	int cnt_f=0;
	int cnt_d=0; 
	for(int i=0;i<14;i++){
		if(bit[i]==0){
			n--;
			cnt_f++;
			if(n<0)return false;
			if(cnt_f>9)return false;
		}
		else{
			n*=2;
			cnt_d++;
			if(cnt_d>5)return false;
		}
	}
	return n==1&&cnt_d==5&&cnt_f==9;
}
int main(){
	int n=2;
	int res=0;
	for(int i=0;i<(1<<14);i++){
		memset(bit,0,sizeof(bit));
		for(int j=0;j<14;j++){
			if(i&(1<<j)){
			   bit[j]=1;	
			}
		}
		if(check()){
			res++;
		}
	}
	cout<<res;
}