Cod sursa(job #18408)

Utilizator cretuMusina Rares cretu Data 18 februarie 2007 12:00:58
Problema Ghiozdan Scor 20
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 1.25 kb
#include <fstream>
#include <vector>
#define INF 9999999

using namespace std;

vector<int> nmin;
vector<int> g;
vector<vector<int> >s;
int n, G;

int main()
{
    int i, j, k;
    ifstream fin("ghiozdan.in");
    fin >> n >> G;
    nmin.resize(G+2);
    g.resize(n+2);
    s.resize(G+2);
    s[0].resize(n+2);
    for (i = 1; i <= G; i++)
    {
        s[i].resize(n+2);
        nmin[i] = INF;
    }
    
    for (i = 1; i <= n; i++)    
        fin >> g[i];
    fin.close();
    
    for (j = 1; j <= G; j++)
        for (i = 1; i <= n; i++)
            if (g[i] <= j && nmin[j-g[i]] != INF && !s[j-g[i]][i])
                if (nmin[j] > nmin[j-g[i]] + 1)
                {
                    nmin[j] = nmin[j-g[i]] + 1;
                    for (k = 1; k <= n; k++)            
                        s[j][k] = s[j-g[i]][k];
                    s[j][i] = 1;
                }
                
    ofstream fout("ghiozdan.out");
    int max;
    for (i = G; i >= 0; i--)
        if (nmin[i] != INF)
        {
            max = i;
            break;
        }
    fout << max << " " << nmin[max] << "\n";
    for (i = 1; i <= n; i++)
        if (s[max][i]) fout << g[i] << "\n";
    fout.close();
    
    return 0;
}