Cod sursa(job #587090)

Utilizator darrenRares Buhai darren Data 3 mai 2011 21:11:39
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.34 kb
#include <cstring>
#include <fstream>
#include <algorithm>

using namespace std;

int N, G;
int V[202], Minob[75002];
int T[75002];
int Gmax, Nmin;

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

    fin >> N >> G;
    for (int i = 1, aux; i <= N; ++i)
    {
        fin >> aux;
        ++V[aux];
    }
    memset(Minob, -1, sizeof(Minob));

    Minob[0] = 0;
    for (int i = 200; i >= 1; --i)
    {
        if (V[i] == 0) continue;
        for (int j = G - i; j >= 0; --j)
            if (Minob[j] != -1)
                for (int k = 1; k <= V[i]; ++k)
                {
                    if (j + i * k > G) break;
                    if (Minob[j + i * k] != -1) break;

                    Minob[j + i * k] = Minob[j + i * (k - 1)] + 1;
                    T[j + i * k] = j + i * (k - 1);

                    if (j + i * k > Gmax)
                    {
                        Gmax = j + i * k;
                        Nmin = Minob[j + i * k];
                    }
                    else if (j + i * k == Gmax)
                        Nmin = min(Nmin, Minob[j + i * k]);
                }
    }

    fout << Gmax << ' ' << Nmin << '\n';

    int now = Gmax;
    while (now)
    {
        fout << now - T[now] << '\n';
        now = T[now];
    }

	fin.close();
	fout.close();
}