感觉复杂度没问题,也剪枝了,但是TLE
这题难度最多就黄吧
#include<iostream>
using namespace std;
string s[15];
int n,m,a[15],ans;
int cmp(string x,string y){
int sum=0;
for(int i=0;i<min(x.size(),y.size());i++){
if(x[i]!=y[i])sum++;
}
return sum;
}
bool check(string now){
for(int i=1;i<=m;i++){
if(cmp(s[i],now)>a[i])return 0;
}
return 1;
}
void dfs(int k,string now){
if(!check(now))return;
if(k==n){
for(int i=1;i<=m;i++){
if(cmp(s[i],now)!=a[i]){
return;
}
}
ans++;
return;
}
dfs(k+1,now+"0");
dfs(k+1,now+"1");
}
int main(){
//cout<<cmp("101","111");
//2333sbsb
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>s[i]>>a[i];
}
dfs(0,"");
cout<<ans;
return 0;
}