Cod sursa(job #1348167)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 19 februarie 2015 15:49:31
Problema Zebughil Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#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;
}