Cod sursa(job #1010647)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 15 octombrie 2013 13:12:32
Problema Zebughil Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <stdio.h>
#include <string.h>

class Zebughil {
public:
    int n, g, x[18];

    int Camioane[1<<17];

    Zebughil() {
        memset(Camioane,0,sizeof(Camioane));
        n=0;
        g=0;
    }

    int camioane(int pietre)
    {
        if(Camioane[pietre]==0)
        {
            int i,greutate=0,k;
            for(i=0;i<n;++i)
            {
                if((pietre&(1<<i))!=0)
                    greutate+=x[i];
            }
            if(greutate<=g)
                Camioane[pietre]=1;
            else
            {
                Camioane[pietre]=n;
                /*
                for(i=1;i<pietre;++i)
                {
                    if((pietre|i)==pietre)
                    {
                        k=camioane(i)+camioane(pietre^i);
                        if(k<Camioane[pietre])
                            Camioane[pietre]=k;
                    }
                }//*/
                for(i=(pietre-1)&pietre;i!=0;i=(i-1)&pietre)
                {
                    k=camioane(i)+camioane(pietre^i);
                    if(k<Camioane[pietre])
                        Camioane[pietre]=k;
                }
            }
        }
        return Camioane[pietre];
    }
};

int main(void) {
    int i;
    Zebughil* zebughil;

    freopen("zebughil.in","r",stdin);
    freopen("zebughil.out","w",stdout);
    for(int k=1;k<=3;++k)
    {
        zebughil = new Zebughil();
        scanf("%d%d",&zebughil->n,&zebughil->g);
        for(i=0;i<zebughil->n;++i)
        {
            scanf("%d",&zebughil->x[i]);
        }
        printf("%d\n",zebughil->camioane((1<<zebughil->n)-1));
        delete zebughil;
    }
    return 0;
}