Cod sursa(job #2802671)

Utilizator Iulia14iulia slanina Iulia14 Data 18 noiembrie 2021 17:19:52
Problema Zebughil Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;
#define ll long long
const ll p2 = (1 << 17);
const ll N = 20;
ll MinG[p2];
ll Min[p2];
ll v[N];
void solve()
{
    ll n, g, i;
    cin >> n >> g;
    for (i = 0; i < n; i++)
        cin >> v[i];
    for (ll msk = 1; msk < (1 << n); msk++)
        MinG[msk] = Min[msk] = 1e16;
    Min[0] = 1;
    for (ll msk = 0; msk < (1 << n); msk++)
        for (i = 0; i < n; i++)
            if (!((1 << i) & msk))
            {
                ll msk2 = msk + (1 << i);
                ll myG = v[i], myN = Min[msk] + 1;
                if (MinG[msk] + v[i] <= g)
                {
                    myN--;
                    myG += MinG[msk];
                }
                if (myN < Min[msk2] || (myN == Min[msk2] && myG < MinG[msk]))
                {
                    Min[msk2] = myN;
                    MinG[msk2] = myG;
                }
            }
    cout << Min[(1 << n) - 1] << '\n';
}
int main()
{
    freopen("zebughil.in", "r", stdin);
    freopen("zebughil.out", "w", stdout);
    int t = 3;
    while(t--)
        solve();
    return 0;
}