#include<iostream>
#include<map>
using namespace std;
int N,sum;
int ans=0x7fffffff;
struct ele{
int n;
ele(int n_=-1){
n=n_;
}
friend bool operator <(ele a,ele b){
return a.n>b.n;
}
};
map <long long,ele> mp;
int melon[31];
void search_l(int start,int end,long long n,int f){
//cout<<start<<" "<<melon[start]<<" "<<n<<" "<<f<<endl;
if(n>sum){
return;
}
if(start!=end+1){
search_l(start+1,end,n,f);
search_l(start+1,end,n+melon[start],f+1);
search_l(start+1,end,n+2*melon[start],f);
}else{
ele tmp(f);
mp[n]=tmp;
return;
}
}
void search_r(long long start,int end,long long n,int f){
if(n>sum){
return;
}
if(start!=end){
search_r(start-1,end,n,f);
search_r(start-1,end,n+melon[start],f+1);
search_r(start-1,end,n+2*melon[start],f);
}else{
if(mp[sum-n].n!=-1){
ans=min(mp[sum-n].n+f,ans);
}
}
return;
}
int main(){
cin>>N>>sum;
for(int i=1;i<=N;i++){
cin>>melon[i];
}
int mid=(N+1)/2;
sum*=2;
search_l(1,mid,0,0);
search_r(N,mid,0,0);
if(ans!=0x7fffffff){
cout<<ans;
}else{
cout<<-1;
}
}
只有56分,有一堆MLE和TLE