Cod sursa(job #1511198)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 26 octombrie 2015 10:26:28
Problema Zebughil Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#include <algorithm>

using std::min;

const int Nmax = 17;
const int INF = 0x7FFFFFFF;

int w[Nmax];      // w[i] = greutatea obiectului i
int d[1 << Nmax]; // numarul de camioane pentru submultimea codificata
int c[1 << Nmax]; // greutatea pentru submultimea codificata

int main(void) {
    freopen("zebughil.in", "r", stdin);
    freopen("zebughil.out", "w", stdout);
    int T, n, g;
    register int i, j;

    for (T = 0; T < 3; T++) {
        scanf("%d%d", &n, &g);
        for (i = 0; i < n; i++) {
            scanf("%d", &w[i]);
            c[1 << i] = w[i];
            d[1 << i] = 1;
        }
        for (i = 3; i < (1 << n); i++) {
            if (i & (i - 1)) {
                c[i] = c[i & -i] + c[(i - 1) & i];
                if (c[i] <= g) {
                    d[i] = 1;
                } else {
                    d[i] = INF;
                    for (j = (i - 1) & i; j != 0; j = (j - 1) & i) {
                        d[i] = min(d[i], d[i ^ j] + d[j]);
                    }
                }
            }
        }
        printf("%d\n", d[(1 << n) - 1]);
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}