Pagini recente » Cod sursa (job #2733459) | Cod sursa (job #1005244) | Cod sursa (job #2506302) | Cod sursa (job #78244) | Cod sursa (job #1348170)
#include<cstdio>
#include<algorithm>
using namespace std;
int vec[21],t,n,g,cate,cam;
struct chestie{int vc,nrb;long long sum;};
chestie v[140001];
void generez(){
cate=0;
int doilan=1<<n;
for(int i=1;i<doilan;i++){
cate++;
v[cate].vc=i;
for(int j=n-1;j>=0;j--)
if(i&(1<<j)){
v[cate].sum+=vec[j+1];
v[cate].nrb++;
}
}
}
bool cmp(const chestie A,const chestie B){
if(A.sum==B.sum)
return A.nrb>B.nrb;
return A.sum<B.sum;
}
void aleg(){
int alese;
cam=0;
alese=0;
int doilan=(1<<n);
for(int i=cate;i>=1&&alese!=doilan-1;i--){
if(v[i].sum<=g&&(alese&v[i].vc)==0){
alese=(alese|v[i].vc);
cam++;
}
}
}
int main(){
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
for(int t=1;t<=3;t++){
scanf("%d%d",&n,&g);
for(int i=1;i<=n;i++)
scanf("%d",&vec[i]);
for(int i=1;i<=140000;i++)
v[i].sum=0;
generez();
sort(v+1,v+cate+1,cmp);
aleg();
printf("%d\n",cam);
}
return 0;
}