Cod sursa(job #1724884)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 4 iulie 2016 14:53:32
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#define NIL -1
#define MAXN 17
int d[MAXN+1][1<<MAXN], v[MAXN];
int main(){
    int t, n, g, i, j, p, ans;
    FILE *fin, *fout;
    fin=fopen("zebughil.in", "r");
    fout=fopen("zebughil.out", "w");
    for(t=3; t; t--){
        fscanf(fin, "%d%d", &n, &g);
        for(i=0; i<n; i++) fscanf(fin, "%d", &v[i]);
        for(i=0; i<=n; i++) for(j=1; j<(1<<n); j++) d[i][j]=NIL;
        ans=n;
        for(i=1; i<n; i++){
            for(j=1; j<(1<<n); j++){
                for(p=0; p<n; p++){
                    if(j&(1<<p)){
                        if((d[i-1][j^(1<<p)]!=NIL)&&(d[i][j]<g-v[p])) d[i][j]=g-v[p];
                        if((d[i][j^(1<<p)]>=v[p])&&(d[i][j]<d[i][j^(1<<p)]-v[p])) d[i][j]=d[i][j^(1<<p)]-v[p];
                    }
                }
            }
            if(d[i][(1<<n)-1]!=NIL){
                ans=i;
                i=n+1;
            }
        }
        fprintf(fout, "%d\n", ans);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}