Cod sursa(job #785396)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 8 septembrie 2012 22:51:02
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#define GM 210
#define NG 75010

using namespace std;

ifstream f("ghiozdan.in");
ofstream g("ghiozdan.out");

int i,j,N,G,k;
int F[GM];
int D[NG],C[NG];
int ANS;

int main ()
{
    f >> N >> G;
    for (i=1; i<=N; i++)
    {
        f >> j;
        F[j]++;
    }

    D[0]=1;

    for (i=GM-1; i>=1; i--)
        if (F[i]>0)
        {
            for (j=G-i; j>=0; j--)
                if (D[j]>0)
                {
                    for (k=1; k<=F[i] && j+k*i<=G && D[j+k*i]==0; k++)
                    {
                        D[j+k*i]=D[j]+k;
                        C[j+k*i]=i;
                    }
                }
        }

    for (i=G; i>=0; i--)
        if (D[i]>0)
        {
            ANS=i;
            break;
        }

    g << ANS << ' ' << D[ANS]-1 << '\n';

    for (; ANS!=0; ANS-=C[ANS])
        g << C[ANS] << '\n';

    f.close();
    g.close();
    return 0;
}