Cod sursa(job #2586682)

Utilizator mihaimodiMihai Modi mihaimodi Data 21 martie 2020 13:00:40
Problema Zebughil Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<fstream>
#define inf 2000000000
#include<algorithm>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
struct zeb
{
    int c,g;
}d[131073];
int v[18];
int n,gmax;
void reset(int x)
{
    for(int i=1;i<=(1<<x);i++)
        d[i]={inf,inf};
}
int main()
{
    for(int t=1;t<=3;t++)
    {
        fin>>n>>gmax;
        reset(n);
        d[0]={1,0};
        for(int i=0;i<n;i++)
            fin>>v[i];
        for(int i=1;i<(1<<n);i++)
            for(int j=0;(1<<j)<=i;j++)
                if(d[i-(1<<j)].c!=inf&&(i&j==j))
                {
                    if(d[i-(1<<j)].g+v[j]<=gmax)
                    {
                        if(d[i-(1<<j)].c<d[i].c||d[i-(1<<j)].c==d[i].c&&d[i].g>d[i-(1<<j)].g+v[j])
                        {
                            d[i].c=d[i-(1<<j)].c;
                            d[i].g=d[i-(1<<j)].g+v[j];
                        }
                    }
                    else
                    {
                        if(d[i-(1<<j)].c+1<d[i].c||d[i-(1<<j)].c+1==d[i].c&&d[i].g>v[j])
                        {
                            d[i].c=d[i-(1<<j)].c+1;
                            d[i].g=v[j];
                        }
                    }
                }
        fout<<d[(1<<n)-1].c<<'\n';

    }

    return 0;
}