Cod sursa(job #2245142)

Utilizator NeredesinI am not real Neredesin Data 24 septembrie 2018 19:22:16
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 18;

int n, g;
int v[NMAX];
int dp[NMAX][1 << NMAX];

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

int solve() {
  dp[0][0] = 0;

  for(int i = 0; i <= n; i++) {
    for(int val = 0; val < (1 << n); val++) {
      if(dp[i][val] < 0)
        continue;

      dp[i + 1][val] = g;
      for(int k = 0; k < n; k++)
        if(!(val & (1 << k)))
          if(dp[i][val] - v[k] >= 0)
            dp[i][val | (1 << k)] = max(dp[i][val | (1 << k)], dp[i][val] - v[k]);
    }

    if(dp[i][(1 << n) - 1] >= 0)
    return i;
  }

  return n;
}

int main()
{
  for(int test = 1; test <= 3; test++) {
    in >> n >> g;
    for(int i = 0; i < n; i++)
      in >> v[i];

    clear_data();
    out << solve() << '\n';
  }

  in.close();
  out.close();

  return 0;
}