Cod sursa(job #196879)

Utilizator DastasIonescu Vlad Dastas Data 29 iunie 2008 19:49:29
Problema Zebughil Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 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;


int kk;
int v[maxn];
void swap(int x, int y)
{
    int t = v[x];
    v[x] = v[y];
    v[y] = t;
}

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

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

    kk = n;
}

void back(int k)
{
    if ( nrcam > min )
        return;

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

        return;
    }

    for ( int i = 1; i <= kk; ++i )
    {
        if ( a[ v[i] ] + s[k-1] <= g )
        {
            s[k] = s[k-1] + a[ v[i] ];

            swap(i, kk);
            --kk;
            back(k+1);
            ++kk;
        }
        else
        {
            ++nrcam;
            s[k] = a[ v[i] ];

            swap(i, kk);
            --kk;
            back(k+1);
            ++kk;

            --nrcam;
        }
    }
}

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


    return 0;
}