Cod sursa(job #1556836)

Utilizator algebristulFilip Berila algebristul Data 26 decembrie 2015 02:20:26
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <algorithm>

using namespace std;

const int nmax = 17;
int n, g;
int z[nmax];
int d[(1<<nmax)];

int main() {
    freopen("zebughil.in", "r", stdin);
    freopen("zebughil.out", "w", stdout);

    int T = 3;

    while(T--) {
        scanf("%d %d", &n, &g);
        for (int i = 0; i < n; i++) {
            scanf("%d", &z[i]);
        }

        for (int m = 1; m < (1<<n); m++) {
            d[m] = n+1;
            int sum = 0;
            for (int i = 0; i < n && sum <= g; i++) {
                if (((1<<i) & m)) {
                    sum += z[i];
                }
            }
            if (sum <= g) {
                d[m] = 1;
                continue;
            }

            for (int m1 = m; m1 > 0; m1 = (m1 - 1) & m) {
                if (d[m1] + d[m1 ^ m] < d[m])
                    d[m] = d[m1] + d[m1 ^ m];
            }
        }

        printf("%d\n", d[(1<<n)-1]);
    }

    return 0;
}