Cod sursa(job #3281528)

Utilizator AndreiNicolaescuEric Paturan AndreiNicolaescu Data 2 martie 2025 00:21:13
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define int long long
#define cin ci
#define cout co
using namespace std;
ifstream cin("zebughil.in");
ofstream cout("zebughil.out");
const int INF = 1e9;
vector<pair<int, int>> dp;
int n, g;
vector<int> v;
int32_t main()
{
    int k = 3;
    while(k--)
    {
        cin >> n >> g;
        v.resize(n+1);
        dp.assign(1 << n, {INF, INF});
        for(int i=0; i<n; i++)
            cin >> v[i];
        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> urm;
                    urm.first = dp[mask ^ (1 << i)].first + (dp[mask ^ (1 << i)].second + v[i] > g);
                    urm.second = (dp[mask ^ (1 << i)].second + v[i] > g) ? v[i] : dp[mask ^ (1 << i)].second + v[i];
                    if((urm.first == dp[mask].first && urm.second < dp[mask].second) || urm.first < dp[mask].first)
                        dp[mask] = urm;
                }
            }
        cout << dp[(1 << n) - 1].first << '\n';
    }

    return 0;
}