Cod sursa(job #611036)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 30 august 2011 14:51:22
Problema Ghiozdan Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
# include <fstream>
using namespace std;

int N, G, cit, v[201], a[75010], ob[75010];
int main ()
{
    ifstream f ("ghiozdan.in");
    ofstream g ("ghiozdan.out");

    f >> N >> G;
    for (int i = 1; i <= N; ++i)
        f >> cit, ++v[cit];

    a[0] = 1;
    for (int i = 200; i >= 1; --i)
    {
        if (v[i])
            for (int j = G; j >= 0; --j)
            {
                if (ob[j] > 0 || a[j] > 0)
                    for (int k = 1; j + k * i <= G && k <= v[i]; ++k)
                        if (!ob[j + k * i] || ob[j + k * i] > ob[j] + k + 1)
                        {
                            ob[j + k * i] = ob[j] + k;
                            a[j + k * i] = (k - 1) * i + j;
                        }
        }
    }

    for (; !ob[G]; --G);
    g << G << ' ' << ob[G] << '\n';
    for (; G > 0; )
    {
        g << G - a[G] << '\n';
        G = a[G];
    }
    g.close ();
    return 0;
}