Cod sursa(job #2846634)

Utilizator biancalautaruBianca Lautaru biancalautaru Data 9 februarie 2022 14:25:37
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int t,n,gmax,i,p,st,ant,v[17];
struct idk {
    int nr,g;
}d[131100];
int main() {
    for (t=1;t<=3;t++) {
        fin>>n>>gmax;
        for (i=0;i<n;i++)
            fin>>v[i];
        p=(1<<n)-1;
        d[0].nr=1;
        d[0].g=0;
        for (i=1;i<=p;i++) {
            d[i].nr=n+1;
            d[i].g=0;
        }
        for (st=1;st<=p;st++)
            for (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;
}