Cod sursa(job #2157500)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 9 martie 2018 17:51:38
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

using namespace std;

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

const int nmax = 17;

int n;
int v[nmax + 1];
pair<int, int> d[1 << nmax];

int main () {
    int n, k;

    for (int t = 0; t < 3; ++ t) {
        fin >> n >> k;
        for (int i = 0; i < n; ++ i)
            fin >> v[ i ];

        for (int i = 0; i < (1 << n); ++ i) {
            d[ i ] = make_pair(1 << 30, 0);
        }
        d[ 0 ] = make_pair(0, 0);

        for (int i = 0; i < (1 << n); ++ i) {
            for (int j = 0; j < n; ++ j) {
                if (i & (1 << j))
                    continue;

                int st = i + (1 << j);
                if (d[ i ].second <= k - v[ j ]) {
                    d[ st ] = min(d[ st ], make_pair(d[ i ].first, d[ i ].second + v[ j ]));
                } else {
                    d[ st ] = min(d[ st ], make_pair(d[ i ].first + 1, v[ j ]));
                }
            }
        }

        fout << d[(1 << n) - 1].first + (d[(1 << n) - 1].second > 0) << "\n";
    }

    fin.close();
    fout.close();
    return 0;
}