Cod sursa(job #1657893)

Utilizator mariusn01Marius Nicoli mariusn01 Data 20 martie 2016 21:17:33
Problema Zebughil Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>

using namespace std;

int D[1<<19];
int t, i, j, v[19], g, n, all, unu, doi, sol;
int f[20];
int main () {

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

    for (int t = 1; t<=3; t++) {
        fin>>n>>g;
        for (i=0;i<n;i++) {
            fin>>v[i];
            f[i] = 0;
        }
        f[n] = 0;
        for (i=1;i<=( 1<<n )-1;i++)
            D[i] = 21;
        while (f[n] == 0) {
            i = 0;
            while (f[i] == 2) {
                f[i] = 0;
                i++;
            }
            f[i]++;

            all = 0;
            unu = 0;
            doi = 0;
            long long s = 0;
            for (i=0;i<n;i++) {
                if (f[i] != 0) {
                    all += (1<<i);
                    s += v[i];
                }

                if (f[i] == 1)
                    unu += (1<<i);
                if (f[i] == 2)
                    doi += (1<<i);

            }
            if (s <= g)
                D[all] = 1;
            if (unu != 0 && doi != 0 && D[all] > D[unu] + D[doi])
                D[all] = D[unu] + D[doi];
            if (all == (1<<n)-1)
                sol = D[all];
        }
        fout<<sol<<"\n";
    }

    return 0;
}