Cod sursa(job #2891541)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 18 aprilie 2022 22:22:02
Problema Ghiozdan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");

const int kV = 200;
const int kG = 75000;
int f[1 + kV], dp[1 + kG], last[1 + kG];

void testCase() {
  int n, g;
  fin >> n >> g;
  for (int i = 0; i < n; ++i) {
    int x;
    fin >> x;
    f[x] += 1;
  }
  for (int i = 1; i <= g; ++i) {
    dp[i] = -1;
  }
  for (int w = kV; w > 0; --w) {
    if (f[w]) {
      for (int wt = g - w; wt >= 0; --wt) {
        if (dp[wt] != -1) {
          for (int i = 1, W = wt + w; i <= f[w] && W <= g; ++i, W += w) {
            if (dp[W] != -1) {
              break;
            }
            dp[W] = dp[wt] + i;
            last[W] = w;
          }
        }
      }
    }
  }
  for (int wt = g; wt >= 0; --wt) {
    if (dp[wt] != -1) {
      fout << wt << ' ' << dp[wt] << '\n';
      while (wt) {
        fout << last[wt] << '\n';
        wt -= last[wt];
      }
      return;
    }
  }
}

int main() {
  int tests = 1;
  for (int tc = 0; tc < tests; ++tc) {
    testCase();
  }
  fin.close();
  fout.close();
  return 0;
}