Pagini recente » Cod sursa (job #3290957) | Cod sursa (job #2491439) | Cod sursa (job #1608647) | Cod sursa (job #1823401) | Cod sursa (job #2643062)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 17;
const int INF = 2.e9;
long long v[NMAX + 5] , G;
int n , m , ok , lim;
void backt(int k , long long g , long long bm)
{
if(k == m && bm == lim)
ok = 1;
else if(k == m + 1)
return;
for(int i = 1 ; i <= n && !ok ; i ++)
if(!(bm&(1 << (i - 1))) && g + v[i] <= G)
backt(k , g + v[i] , bm|(1 << (i - 1)));
else
backt(k + 1 , 0 , bm);
}
int bs()
{
int st , dr , med , last;
st = 1;
dr = n;
last = -1;
while(st <= dr)
{
med = (st + dr) / 2;
m = med;
ok = 0;
backt(1 , 0 , 0);
if(ok)
{
last = med;
dr = med - 1;
}
else
st = med + 1;
}
return last;
}
int main()
{
freopen("zebughil.in" , "r" , stdin);
freopen("zebughil.out" , "w" , stdout);
for(int i = 1 ; i <= 3 ; i ++)
{
scanf("%d%lld" , &n , &G);
for(int j = 1 ; j <= n ; j ++)
scanf("%lld" , &v[j]);
sort(v + 1 , v + n + 1);
lim = (1 << n) - 1;
printf("%d\n" , bs());
}
return 0;
}