Cod sursa(job #1665929)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 27 martie 2016 14:54:04
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int Mn = 17;

int n, g;
int w[17];
int dp[(1 << Mn) + Mn];
long long sm;

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

    for (int k = 0; k < 3; k++)
    {
        scanf("%d %d", &n, &g);
        for (int i = 0; i < n; i++)
            scanf("%d", &w[i]);

        for (int i = 1; i < (1 << n); i++)
        {
            sm = 0;
            for (int j = 0; j < n; j++)
                if (i & (1 << j))
                   sm += w[j];

            if (sm <= g)
               dp[i] = 1;
          else
            {
                dp[i] = n;
                for (int j = (i - 1) & i; j; j = (j - 1) & i)
                    if (dp[j] + dp[i ^ j] < dp[i])
                       dp[i] = dp[j] + dp[i ^ j];
            }
        }

        printf("%d\n", dp[(1 << n) - 1]);
    }

  return 0;
}