Cod sursa(job #2846630)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 9 februarie 2022 14:22:34
Problema Zebughil Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <fstream>

using namespace std;

ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

struct punct
{
    int nr, g;
} d[130000];
int v[18];
int n, gmax, st, ant, bit;

int main()
{
    d[0].nr = 1, d[0].g = 0;
    for (int t = 1; t <= 3; t++)
    {
        fin >> n >> gmax;
        for (int i = 1; i <= n; i++)
            fin >> v[i];

        for (int 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)
                    {
                        if (d[ant].g + 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
                        {
                            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';
    }

    return 0;
}