Cod sursa(job #1420268)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 18 aprilie 2015 01:07:16
Problema Zebughil Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

#define inFile "zebughil.in"
#define outFile "zebughil.out"
#define MAX_N 18

FILE *in = fopen(inFile, "r");
FILE *out = fopen(outFile, "w");

int G, N, minGr;
int W[MAX_N];
int S[MAX_N];

void BKT(int k, int u) {
    if(k == N+1) minGr = min(minGr, u);
    else {
        int i;
        for(i = 1; i <= u; i++) {
            if(S[i] + W[k] <= G) {
                S[i] += W[k];
                BKT(k+1, u);
                S[i] -= W[k];
            }
        }
        S[u+1] = W[k];
        BKT(k+1, u+1);
        S[u+1] = 0;
    }
}

int main() {
    int T, i;
    
    for(T = 1; T <= 3; T++) {
        memset(S, 0, sizeof(S));
        memset(W, 0, sizeof(W));
            
        fscanf(in, "%d %d", &N, &G);
        for(i = 1; i <= N; i++) fscanf(in, "%d", &W[i]);
        
        minGr = MAX_N;
        BKT(1, 0);
        
        fprintf(out, "%d\n", minGr);
    }
    
    fclose(in);
    fclose(out);
    
    return 0;
}