Cod sursa(job #133515)

Utilizator DastasIonescu Vlad Dastas Data 8 februarie 2008 20:18:13
Problema Zebughil Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>

const int maxn = 20;

FILE *in = fopen("zebughil.in","r"), *out = fopen("zebughil.out","w");

int n, g;
int a[maxn];
int s[maxn];

int min;
int nrcam;

void readcase()
{
    fscanf(in, "%d %d", &n, &g);

    for ( int i = 1; i <= n; ++i )
        fscanf(in, "%d", &a[i]);
}

int v[maxn];
void back(int k)
{
    if ( nrcam > min )
        return;

    if ( k > n )
    {
        if ( nrcam < min )
            min = nrcam;

        return;
    }

    for ( int i = 1; i <= n; ++i )
        if ( !v[i] )
        {
            ++v[i];
            if ( a[i] + s[k-1] <= g )
            {
                s[k] = s[k-1] + a[i];
                back(k+1);
            }
            else
            {
                ++nrcam;
                s[k] = a[i];
                back(k+1);
                --nrcam;
            }
            --v[i];
        }
}

int main()
{
    for ( int i = 0; i < 3; ++i )
    {
        readcase();
        min = 1 << 30;
        nrcam = 1;
        back(1);
        fprintf(out, "%d\n", min);
    }


    return 0;
}