Cod sursa(job #3282113)

Utilizator Sasha_12454Eric Paturan Sasha_12454 Data 4 martie 2025 15:43:57
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("zebughil.in");
ofstream g ("zebughil.out");

#define int long long
const int NMAX = 17, INF = 1e9;

int v[NMAX];
pair <int, int> dp[1 << NMAX];

int32_t main()
{

    int tt = 3;
    while(tt --)
    {
        int n, G;
        f >> n >> G;
        for(int i = 0; i < n; i ++)
        {
            f >> v[i];
        }
        for(int i = 0; i < (1 << n); i ++) dp[i] = {INF, INF};

        dp[0] = {1, 0};

        for(int mask = 1; mask < (1 << n); mask ++)
        {
            for(int i = 0; i < n; i ++)
            {
                if(mask & (1 << i))
                {
                    pair <int, int> aux;
                    aux.first = dp[mask - (1 << i)].first + (dp[mask - (1 << i)].second + v[i] > G);
                    aux.second = (dp[mask - (1 << i)].second + v[i] > G) ? v[i] : dp[mask - (1 << i)].second + v[i];
                    if((aux.first == dp[mask].first && aux.second < dp[mask].second) || aux.first < dp[mask].first)
                    {
                        dp[mask] = aux;
                    }
                }
            }
        }

        g << dp[(1 << n) - 1].first << '\n';
    }

    return 0;
}