#include<bits/stdc++.h>
using namespace std;
#define maxn 1000010
typedef long long ll;
ll a[maxn];
map<ll,int>mp1,mp2;
map<ll,string>ma1,ma2;
int main(){
ll n,m; scanf("%lld%lld",&n,&m);
for(int i=0;i<n;i++) scanf("%lld",&a[i]);
int n1=n/2,n2=n-n/2;
for(int i=0;i<(1<<n1);i++){
ll sum=0; string str;
for(int j=0;j<n1;j++){
if(i&(1<<j)){
sum+=a[j]; str+='1';
}
else str+='0';
}
mp1[sum]=1; ma1[sum]=str;
}
for(int i=0;i<(1<<n2);i++){
ll sum=0; string str;
for(int j=0;j<n2;j++){
if(i&(1<<j)){
sum+=a[n1+j]; str+='1';
}
else str+='0';
}
mp2[sum]=1; ma2[sum]=str;
}
map<ll,int>::iterator it;
for(it=mp1.begin();it!=mp1.end();it++){
ll d=m-(*it).first;
if(mp2[d]==1){
cout<<ma1[(*it).first]<<ma2[d]<<endl;
break;
}
}
return 0;
}
Knapsack Cryptosystem【生成子集】
最新推荐文章于 2019-08-18 16:53:19 发布