Pagini recente » Cod sursa (job #2633395) | Cod sursa (job #601994) | Cod sursa (job #600264) | Cod sursa (job #2693063) | Cod sursa (job #601882)
Cod sursa(job #601882)
#include <stdio.h>
#include <string.h>
#include <queue>
#include <utility>
#include <algorithm>
#define NMax 18
using namespace std;
const char IN[]="zebughil.in",OUT[]="zebughil.out";
int Tes=3,N,G;
int a[NMax] , T[NMax][1<<NMax];
int solve()
{
queue<pair<int,int> > qu;
int i,j,k,r,mask;
memset(T,0,sizeof(T));
for (i=0;i<=(1<<N);++i)
for (j=0;j<N;++j)
T[j][i]=-1;
for (i=0;i<N;++i)
mask=1<<i,
T[0][mask]=a[i];
for (i=0;i<N;++i)
{
for (j=0;j<= (1<<N);++j)
for (k=0;k<N;++k) if ( T[i][j]!=-1 && (r=((1<<k) ^ j )) > j)
if ( T[i][j]+a[k]<=G )
T[i][r] = T[i][r]==-1 || T[i][j]+a[k]<T[i][r] ? T[i][j]+a[k] : T[i][r];
else
T[i+1][r]= T[i+1][r]==-1 || T[i+1][r]<=a[k] ? a[k] : T[i+1][r];
if (T[i][ (1<<N) - 1 ]!=-1 ) return i+1;
}
return -1;
}
int main()
{
int i;
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
while (Tes--)
{
scanf("%d%d",&N,&G);
for (i=0;i<N;++i) scanf("%d",a+i);
printf("%d\n",solve());
}
fclose(stdout);
fclose(stdin);
return 0;
}