Cod sursa(job #2349810)

Utilizator shantih1Alex S Hill shantih1 Data 20 februarie 2019 18:52:34
Problema Zebughil Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

long long n, g, i, j, v[20], u[20], k, mn, m;
int bk[20], rez;
bool z[20];

void suma () {
    
    long long sum = 0;
    for (int i = 1; i <= k; i++)
        sum += v[bk[i]];
    
    long long nr = g-sum;
    if (nr >= 0 && nr < mn)
    {
        mn = nr;
        for (i = 1; i <= n; i++)
            z[i] = 1;
        for (i = 1; i <= k; i++)
            z[v[bk[i]]] = 0;
    }
}

void back (int p) {
    
    for (int i = bk[p-1]+1; i <= n; i++)
    {
        bk[p] = i;
        if (p == k) suma();
        else back(p+1);
    }
}

int main () {
    
    for (j = 1; j <= 3; j++)
    {
        fin >> n >> g;
        for (i = 1; i <= n; i++)
            fin >> v[i];
        
        m = n;  n = 0;
        for (i = 1; i <= m; i++)
            if (v[i] != 0)  {   n++;    v[n] = v[i];    }
        
        rez = 0;
        while (n > 0)
        {
            mn = g+1;
            for (k = 1; k <= n; k++)
                back(1);
            
            m = n;  n = 0;
            for (i = 1; i <= m; i++)
                if (z[i] == 1)  {   n++;    v[n] = v[i];    }
            
            rez++;
        }
        fout << rez << "\n";
    }
}