Cod sursa(job #1256912)

Utilizator hanganflorinHangan Florin hanganflorin Data 6 noiembrie 2014 23:41:34
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <cstring>
#define INF 0x3f3f3f3f
using namespace std;

ifstream is("ghiozdan.in");
ofstream os("ghiozdan.out");

int n, g, a[20002], x[20002];
int D[75002];
bool ok;
void Scrie(int p);

int main()
{
    is >> n >> g;
    memset(D, 63, sizeof(D) );
    D[0] = 0;
    for ( int i = 1; i <= n; ++i )
        is >> a[i];
    for ( int i = 1;i <= n; ++i )
    {
        ok = true;
        for ( int j = g - a[i]; j >= 0; --j )
            if ( D[j+a[i]] > D[j] + 1 )
            {
                if ( ok )
                {
                    x[j+a[i]] = j;
                    ok = false;
                }
                D[j+a[i]] = D[j] + 1;

            }
    }
    while ( D[g] == INF )
        g--;
    os << g << '\n';
    Scrie(g);
    is.close();
    os.close();
    return 0;
}
void Scrie(int p)
{
    if ( p == 0 )
        return;
    Scrie(x[p]);
    os << p - x[p] << ' ';
}