Cod sursa(job #3174285)

Utilizator biancalautaruBianca Lautaru biancalautaru Data 24 noiembrie 2023 16:42:34
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#define DIM 17
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int n,gmax,p,st,ant,v[DIM];
struct elem {
    int nr,g;
}d[(1<<DIM)];
int main() {
    for (int t=1;t<=3;t++) {
        fin>>n>>gmax;
        for (int i=0;i<n;i++)
            fin>>v[i];
        p=(1<<n)-1;
        d[0].nr=1;
        d[0].g=0;
        for (int i=1;i<=p;i++) {
            d[i].nr=n+1;
            d[i].g=0;
        }
        for (int st=1;st<=p;st++)
            for (int i=0;i<n;i++)
                if (((st>>i)&1)==1) {
                    ant=st-(1<<i);
                    if (d[ant].nr!=n+1) {
                        if (d[ant].g+1LL*v[i]<=gmax) {
                            if (d[ant].nr<d[st].nr || (d[ant].nr==d[st].nr && d[ant].g+v[i]<d[st].g)) {
                                d[st].nr=d[ant].nr;
                                d[st].g=d[ant].g+v[i];
                            }
                        }
                        else
                            if (d[ant].nr+1<d[st].nr || (d[ant].nr+1==d[st].nr && v[i]<d[st].g)) {
                                d[st].nr=d[ant].nr+1;
                                d[st].g=v[i];
                            }
                    }
                }
        fout<<d[p].nr<<"\n";
    }
    return 0;
}