Cod sursa(job #2197839)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 22 aprilie 2018 22:33:17
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>
#include <algorithm>

using namespace std;

pair<int, int>dp[(1 << 17) + 5];
int a[20];

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

  for (int t = 0; t < 3; ++t) {
    int n, g;
    scanf("%d%d", &n, &g);
    for (int i = 1; i <= n; ++i)
      scanf("%d", &a[i]);
    int ns = (1 << n);
    dp[0] = {0, g};
    for (int i = 1; i < ns; ++i) {
      dp[i] = {20, 0};
      for (int j = 0; j < n; ++j)
        if (i & (1 << j)) {
          pair<int, int>aux = dp[i ^ (1 << j)];
          if (aux.second + a[j + 1] <= g)
            aux.second += a[j + 1];
          else {
            aux.first++;
            aux.second = min(aux.second, a[j + 1]);
          }
          if (aux < dp[i])
            dp[i] = aux;
        }
    }
    printf("%d\n", dp[ns - 1].first);
  }
  return 0;
}