poj 3628 Bookshelf 2
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
int arr[25],s,n,b,shelf[20000005];
void dfs(int i)
{
s+=arr[i]; shelf[s]=1;
if(s==b)
return ;
else if(s>b)
s-=arr[i];
else
{
for(int j=i+1;j<n;++j)
{
dfs(j);
if(s==b)
return ;
}
s-=arr[i];
}
}
int main()
{
cin>>n>>b;
for(int i=0;i<n;++i)
cin>>arr[i];
sort(arr,arr+n,greater<int>());
for(int i=0;i<n;++i)
{
dfs(i);
if(s==b)
{
cout<<"0\n";return 0;
}
}
for(int i=b+1;;++i)
if(shelf[i]==1)
{
cout<<i-b<<endl;
break;
}
return 0;
}