Cod sursa(job #1081179)

Utilizator crisbodnarCristian Bodnar crisbodnar Data 13 ianuarie 2014 12:24:05
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

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

const int Greu = 205;
const int Gmax = 76000;

int N, G, FR[Greu], DP[Gmax], T[Gmax];

int main()
{
    fin >> N >> G;
    for(int i=1; i <= N; i++)
    {
        int val; fin >> val;
        FR[val]++;
    }

    DP[0] = 1;
    for(int i=200; i > 0; i--)
        if(FR[i])
            for(int j = G - i; j >= 0; j--)
                if(DP[j])
                    for(int k = 1; k <= FR[i] && j + k * i <= G && !DP[j + k * i]; k++)
                    {
                        DP[j + k * i] = DP[j] + k;
                        T[j + k * i] = i;
                    }

    for(int i=G; i >= 1; i--)
        if(DP[i])
        {
            fout<<i<<' '<<DP[i] - 1<<'\n';
            fout<<T[i]<<'\n';
            while(i - T[i])
            {
                i -= T[i];
                fout<<T[i]<<'\n';
            }
            return 0;
        }
    return 0;
}