Cod sursa(job #2495288)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 19 noiembrie 2019 03:57:40
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>

#define cnt first
#define space second

const int TEST = 3;
const int BITS = 17;
const int INF = 500;
const int MAX_N = 1 << BITS;

int n, g;

std::pair <int, int> dp[MAX_N];
int arr[BITS];

int main() {
  std::pair <int, int> aux;
  freopen("zebughil.in", "r", stdin);
  freopen("zebughil.out", "w", stdout);
  for (int test = 0; test < TEST; ++test) {
    std::cin >> n >> g;
    for (int i = 0; i < n; ++i) {
      std::cin >> arr[i];
    }
    for (int mask = 0; mask < (1 << n); ++mask) {
      dp[mask] = std::make_pair(INF, 0);
    }
    dp[0] = std::make_pair(0, g);
    for (int mask = 1; mask < (1 << n); ++mask) {
      for (int bit = 0; bit < n; ++bit) {
        if ((mask & (1 << bit)) > 0) {
          aux = dp[mask ^ (1 << bit)];
          if (aux.space + arr[bit] <= g) {
            aux.space += arr[bit];
          } else {
            aux.space = std::min(aux.space, arr[bit]);
            ++aux.cnt;
          }
          dp[mask] = std::min(dp[mask], aux);
        }
      }
    }
    std::cout << dp[(1 << n) - 1].cnt << "\n";
  }
  return 0;
}