思路(字不好,但是很详细)


代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
char s[110];
int n,m,idx;
int ans;
int get(int l,int r){
int res=0;
for(int i=l;i<=r;i++){
res*=2;
res+=s[i]-'0';
}
return res;
}
void dfs(int u,int len,int sum){
if(ans>1)return;
if(len>m)return;
if(sum>n)return;
if(u>=idx){
if(len==m&&sum==n)ans++;
return;
}
if(s[u]=='1'){
for(int i=u;i<idx;i++){
if(i<idx-1&&s[i+1]=='1')continue;
int t=get(u,i);
if(t==3)dfs(i+1,len+2,sum+2);
dfs(i+1,len+t,sum+t);
}
}else{
dfs(u+1,len+1,sum);
}
}
int main(){
cin >> m >> n;
cin >> s;
idx=strlen(s);
dfs(0,0,0);
if(ans==1)cout << "YES\n";
if(ans>1)cout << "NOT UNIQUE\n";
if(ans<1)cout << "NO\n";
}
327

被折叠的 条评论
为什么被折叠?



