Cod sursa(job #3174360)

Utilizator gianiferSpita Alexandru-Mihai gianifer Data 24 noiembrie 2023 17:56:44
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

#define INF 2e9 + 1

using namespace std;

ifstream fin("zebughil.in");

ofstream fout("zebughil.out");

int dp1[(1 << 17)], dp2[(1 << 17)];

int a[20], n, g;

int nr = 3;

int main()
{
    for (; nr--;)
    {
        fin >> n >> g;
        for (int i = 1; i <= n; i++)
        {
            fin >> a[i];
        }
        for (int i = 1; i < (1 << n); i++)
        {
            dp1[i] = INF;
        }
        dp1[0] = 1;
        for (int i = 1; i < (1 << n); i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (i & (1 << j))
                {
                    int nou = i - (1 << j);
                    if (dp2[nou] + a[j + 1] <= g)
                    {
                        if (dp1[nou] < dp1[i] || (dp1[nou] == dp1[i] && dp2[nou] + a[j + 1] < dp2[i]))
                        {
                            dp1[i] = dp1[nou];
                            dp2[i] = dp2[nou] + a[j + 1];
                        }
                    }
                    else if ((dp1[nou] + 1) < dp1[i] || ((dp1[nou] + 1) == dp1[i] && a[j + 1] < dp2[i]))
                    {
                        dp1[i]=dp1[nou]+1;
                        dp2[i]=a[j + 1];
                    }
                }
            }
        }
        fout<<dp1[(1<<n)-1]<<'\n';
    }
}