Cod sursa(job #2505109)

Utilizator popashtefan10Popa Stefan popashtefan10 Data 6 decembrie 2019 10:36:33
Problema Ghiozdan Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define NMAX 20000
#define GMAX 75000

using namespace std;

int n, G, last_g;
int g[NMAX + 5], d[GMAX + 5], nobj[GMAX + 5], uz[GMAX + 5];

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

  scanf("%d %d", &n, &G);
  last_g = 0;
  d[0] = 1;
  for(int i = 0; i <= G; i++)
    nobj[i] = NMAX + 5;
  nobj[0] = 0;
  for(int i = 1; i <= n; i++) {
    scanf("%d", &g[i]);
    for(int j = min(last_g + g[i], G); j >= g[i]; j--)
      if(d[j - g[i]] == 1) {
        d[j] = 1;
        if(nobj[j - g[i]] + 1 < nobj[j]) {
          nobj[j] = nobj[j - g[i]] + 1;
          uz[j] = g[i];
        }
        last_g = max(last_g, j);
      }
  }
  printf("%d %d", last_g, nobj[last_g]);

  for(int i = last_g; i > 0; i -= uz[i])
    printf("%d\n", uz[i]);

  return 0;
}