Cod sursa(job #3282099)

Utilizator Sasha_12454Eric Paturan Sasha_12454 Data 4 martie 2025 14:51:17
Problema Zebughil Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <bits/stdc++.h>

using namespace std;

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

const long long NMAX = 17, INF = 1e9;

long long v[NMAX];

long long dp[1 << NMAX];
long long rem[1 << NMAX];

int main()
{

    //ios_base :: sync_with_stdio(false);
    //cin.tie(NULL);

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

        for(long long mask = 0; mask < (1 << n); mask ++)
        {
            for(long long i = 0; i < n; i ++)
            {
                if((mask & (1 << i)) == 0)
                {
                    long long aux = dp[mask] + (rem[mask] + v[i] > G);
                    if(aux < dp[mask + (1 << i)])
                    {
                        dp[mask + (1 << i)] = aux;
                        if(rem[mask] + v[i] > G) rem[mask + (1 << i)] = rem[mask] + v[i] - G;
                        else rem[mask + (1 << i)] = rem[mask] + v[i];
                    }
                    else if(aux == dp[mask + (1 << i)])
                    {
                        aux = rem[mask] + v[i];
                        if(aux > G) aux -= G;
                        rem[mask + (1 << i)] = min(rem[mask + (1 << i)], aux);
                    }
                }
            }
        }
        g << dp[(1 << n) - 1] + 1 << '\n';
    }

    return 0;
}