Cod sursa(job #3040725)

Utilizator ciacliboiiiciacli stefan ciacliboiii Data 30 martie 2023 12:46:05
Problema Zebughil Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int n, g, w[(1 << 18)], nr[(1 << 18)], v[18];
///#define fin cin
///#define fout cout
void solve()
{
    fin >> n >> g;
    for(int i = 0; i < n; ++ i)
    {
        fin >> v[i];
    }
    fill(w + 1, w + n + 1, 1e9);
    nr[0] = 1;
    int comp = (1 << n) - 1;
    for(int i = 1; i <= comp; ++ i)
    {
        for(int j = 0; j < n; ++ j)
            if(i & (1 << j))
            {
                int prec = i ^ (1 << j);
                if(w[prec] + v[j] <= g)
                {
                    if((nr[prec] < nr[i] || nr[i] == 0) || (nr[prec] == nr[i] && w[i] > w[prec] + v[j]))
                    {
                        nr[i] = nr[prec];
                        w[i] = w[prec] + v[j];
                    }
                }else
                    if((nr[prec] + 1 < nr[i] || nr[i] == 0) || ((nr[prec] + 1) == nr[i] && w[i] > v[j]))
                    {
                        nr[i] = nr[prec] + 1;
                        w[i] = v[j];
                    }
            }
    }
    fout << nr[comp] << '\n';
}
int main()
{
    for(int i = 0; i < 3; ++ i)
        solve();
    return 0;
}