Cod sursa(job #1520216)

Utilizator ZenusTudor Costin Razvan Zenus Data 8 noiembrie 2015 15:11:06
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

const int inf = 1000000000;
const int nmax = 17;

int tests , n , g , i , j , k;
int sum[1 << nmax] , dp[1 << nmax];
int a[nmax];

int main()
{
freopen("zebughil.in" , "r" , stdin);
freopen("zebughil.out" , "w" , stdout);

for (tests = 3 ; tests ; --tests)
{
    scanf("%d" , &n);
    scanf("%d" , &g);

    for (i = 0 ; i < n ; ++i)
    scanf("%d" , &a[i]);

    for (i = 0 ; i < (1 << n) ; ++i)
    {
        sum[i] = 0;
        for (j = 0 ; j < n ; ++j)
        if ((1 << j) & i) sum[i] += a[j];
    }

    dp[0] = 0;
    for (i = 1 ; i < (1 << n) ; ++i)
    {
        for (j = 0 ; (1 << j) <= i ; ++j);
        j -= 1;

        dp[i] = inf;
        for (k = i ; k & (1 << j) ; k = (k - 1) & i)
        {
            if (sum[k] > g) continue;
            dp[i] = min(dp[i] , dp[i - k] + 1);
        }
    }
    printf("%d\n" , dp[(1 << n) - 1]);
}

return 0;
}