Pagini recente » Cod sursa (job #30240) | Cod sursa (job #524335) | Cod sursa (job #1671553) | Cod sursa (job #2335201) | Cod sursa (job #1348167)
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=17;
const int MAXX=150000;
class Tin{
public:
int bits;
long long sum;
int nr;
bool operator<(const Tin&t)const{
if(sum==t.sum)
return nr>t.nr;
return sum<t.sum;
}
};
Tin t[MAXX+1];
int v[N+1];
int n,g;
int st,nrt;
long long summ;
void back(int k){
int p=1<<n;
for(int i=1;i<=p-1;i++){
int m=i;
summ=0;
int nrb=0;
for(int j=n-1;j>=0;j--)
if(m&(1<<j)){
summ+=v[j+1];
nrb++;
}
t[i].bits=i;
t[i].sum=summ;
t[i].nr=nrb;
}
}
int main(){
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
int tt=3;
while(tt--){
scanf("%d%d",&n,&g);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
for(int i=1;i<=MAXX;i++)
t[i].bits=t[i].sum=0;
nrt=(1<<n)-1;
back(1);
sort(t+1,t+nrt+1);
int now=0,res=0;
for(int i=nrt;i>=1;i--)
if(((now&t[i].bits)==0)&&(t[i].sum<=g)){
res++;
now|=t[i].bits;
}
printf("%d\n",res);
}
return 0;
}