Cod sursa(job #2846631)

Utilizator gabriel.9619Gabriel Stefan Tita gabriel.9619 Data 9 februarie 2022 14:22:38
Problema Zebughil Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <fstream>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
struct punct {
    int nr, g;
}d[130000];

int v[18], n, gmax, i, st, ant, bit;
int main()
{
    d[0].nr=1;
    d[0].g=0;
    for(int t=1;t<=3;t++)
    {
        fin>>n>>gmax;
        for(i=1;i<=n;i++)
            fin>>v[i];
        for(i=1;i<(1<<n);i++)
        {
            d[i].nr=n+1;
            d[i].g=0;
        }
        for(st=1;st<(1<<n);st++)
        {
            for(bit=0;bit<n;bit++)
            {
                if(((st>>bit)&1)==1)
                {
                    ant=st-(1<<bit);
                    if(d[ant].nr!=n+1)
                    {
                        ///incerc sa adaug la acelasi transport
                        if(d[ant].g+1ll*v[bit+1]<=gmax)
                        {
                            if(d[st].nr>d[ant].nr||d[st].nr==d[ant].nr&&d[st].g>d[ant].g+v[bit+1])
                            {
                                d[st].nr=d[ant].nr;
                                d[st].g=d[ant].g+v[bit+1];
                            }
                        }
                        else
                        {
                            /// trebuie sa initiez un nou traNSPORT
                            if(d[st].nr>d[ant].nr+1||d[st].nr==d[ant].nr+1&&d[st].g>v[bit+1])
                            {
                                d[st].nr=d[ant].nr+1;
                                d[st].g=v[bit+1];
                            }
                        }
                    }
                }
            }
        }
        fout<<d[(1<<n)-1].nr<<"\n";
    }
}