Cod sursa(job #1819152)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 30 noiembrie 2016 11:55:24
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>

using namespace std;

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

const int N = 210, G = 75010;

int n, g, i, j, x, v[N], a[G], d[G], k;

int main() {
    fin >> n >> g;
    for (i = 1; i <= n; ++i) {
        fin >> x;
        v[x]++;
    }
    d[0] = 1;
    for (i = N - 1; i > 0; --i) {
        if (v[i]) {
            for (j = g - i; j >= 0; --j){
                if (d[j]) {
                    for (k = 1; k <= v[i] && j + i * k <= g && !d[j + i * k]; k++) {
                        d[j + i * k] = d[j] + k;
                        a[j + i * k] = i;
                    }
                }
            }
        }
    }
    for (i = g; i >= 0; --i){
        if (d[i]) {
            fout << i << " " << d[i] - 1 << "\n";
            while (a[i]) {
                fout << a[i] << "\n";
                i -= a[i];
            }
        }
    }
    return 0;
}