Cod sursa(job #2643064)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 18 august 2020 16:34:29
Problema Zebughil Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 17;
const int INF = 2.e9;
long long v[NMAX + 5] , G;
int n , m , ok , lim;
void backt(int k , long long g , long long bm)
{
    if(k == m && bm == lim)
        ok = 1;
    else if(k == m + 1)
        return;
    for(int i = 1 ; i <= n && !ok ; i ++)
        if(!(bm&(1 << (i - 1))))
        {
            if(g + v[i] <= G)
                backt(k , g + v[i] , bm|(1 << (i - 1)));
            else
                backt(k + 1 , 0 , bm);
        }
}
int bs()
{
    int st , dr , med , last;
    st = 1;
    dr = n;
    last = -1;
    while(st <= dr)
    {
        med = (st + dr) / 2;
        m = med;
        ok = 0;
        backt(1 , 0 , 0);
        if(ok)
        {
            last = med;
            dr = med - 1;
        }
        else
            st = med + 1;
    }
    return last;
}
int main()
{
    freopen("zebughil.in" , "r" , stdin);
    freopen("zebughil.out" , "w" , stdout);
    for(int i = 1 ; i <= 3 ; i ++)
    {
        scanf("%d%lld" , &n , &G);
        for(int j = 1 ; j <= n ; j ++)
            scanf("%lld" , &v[j]);
        sort(v + 1 , v + n + 1);
        lim = (1 << n) - 1;
        printf("%d\n" , bs());
    }
    return 0;
}