Cod sursa(job #920487)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 20 martie 2013 15:29:27
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.99 kb
#include <fstream>

#define GMAX 205
#define MAX 75005

using namespace std;

int N, G;
int V[GMAX], dp[MAX], rec[MAX];

void citire() {
    ifstream in("ghiozdan.in");
    in>>N>>G;
    for(int i = 1, A; i <= N; i++) {
        in>>A;
        V[A]++;
    } in.close();
}

void solve() {
    dp[0] = 1;
    for(int i = GMAX - 1; i; i--) {
        if(!V[i]) continue;
        for(int j = G - i; j >= 0; j--) {
            if(!dp[j]) continue;
            for(int k = 1; k <= V[i] && j + k * i <= G; k++)
                if(!dp[j + k * i]) {
                    dp[j + k * i] = dp[j] + k;
                    rec[j + k * i] = i;
                } else break;
        }
    }
}

void afisare() {
    int ans;
    for(ans = G; !dp[ans]; ans--);
    ofstream out("ghiozdan.out");
    out<<ans<<" "<<dp[ans] - 1<<"\n";
    for(; ans; ans -= rec[ans])
        out<<rec[ans]<<"\n";
    out.close();
}

int main()
{
    citire();
    solve();
    afisare();
    return 0;
}