Cod sursa(job #471556)

Utilizator DraStiKDragos Oprica DraStiK Data 19 iulie 2010 14:15:51
Problema Zebughil Scor 100
Compilator cpp Status done
Runda PreONI Pregatire *** Marime 1.13 kb
#include <algorithm>
using namespace std;

#define MAX (1<<17)+5
#define DIM 20

int bst[MAX][DIM];
int v[DIM];
int n,g;

void read ()
{
    int i;

    scanf ("%d%d",&n,&g);
    for (i=1; i<=n; ++i)
        scanf ("%d",&v[i]);
}

void solve ()
{
    int i,j,k;

    memset (bst,-1,sizeof (bst));
    bst[0][0]=g;
    for (i=0; i<(1<<n); ++i)
        for (j=0; j<n; ++j)
            for (k=1; k<=n; ++k)
                if (!(i&(1<<(k-1))) && bst[i][j]!=-1)
                    if (bst[i][j]>=v[k])
                        bst[i|(1<<(k-1))][j]=max (bst[i|(1<<(k-1))][j],bst[i][j]-v[k]);
                    else
                        bst[i|(1<<(k-1))][j+1]=max (bst[i|(1<<(k-1))][j+1],g-v[k]);
}

void print ()
{
    int i;

    for (i=0; i<n; ++i)
        if (bst[(1<<n)-1][i]!=-1)
        {
            printf ("%d\n",i+1);
            return ;
        }
    printf ("1\n");
}

int main ()
{
    freopen ("zebughil.in","r",stdin);
    freopen ("zebughil.out","w",stdout);
    int i;

    for (i=1; i<=3; ++i)
    {
        read ();
        solve ();
        print ();
    }

    return 0;
}