Cod sursa(job #1348092)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 19 februarie 2015 15:12:34
Problema Zebughil Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=17;
const int MAXX=150000;
class Tin{
    public:
        int bits;
        int sum;
        bool operator<(const Tin&t)const{
            return sum<t.sum;
        }
        Tin(){
        }
        Tin(int b,int s){
            bits=b;
            sum=s;
        }
};
Tin t[MAXX+1];
int v[N+1];
int n,g;
int st,summ,nrt;
void back(int k){
    if(k==n+1){
        t[++nrt]=Tin(st,summ);
        return;
    }
    for(int i=0;i<=1;i++){
        st=st*2+i;
        summ+=i*v[k];
        back(k+1);
        summ-=i*v[k];
        st=(st-i)/2;
    }
}
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=0;
        back(1);
        sort(t+1,t+nrt+1);
        int now=0,res=0;
        for(int i=nrt;i>=2;i--)
            if(((now&t[i].bits)==0)&&(t[i].sum<=g)){
                res++;
                now|=t[i].bits;
            }
        printf("%d\n",res);
    }
    return 0;
}