Cod sursa(job #1724882)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 4 iulie 2016 14:51:50
Problema Zebughil Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 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;
        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];
                    }
                }
            }
        }
        ans=1;
        while(d[ans][(1<<n)-1]==NIL) ans++;
        fprintf(fout, "%d\n", ans);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}