Cod sursa(job #2121546)

Utilizator Alex18maiAlex Enache Alex18mai Data 3 februarie 2018 20:12:31
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>

using namespace std;

ifstream cin ("ghiozdan.in");
ofstream cout ("ghiozdan.out");

int fv [201];
int last [75001];

int main() {

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n , G;
    cin>>n>>G;

    int nr;
    int i , j , k;

    for (i=1; i<=n; i++){
        cin>>nr;
        fv[nr]++;
    }

    last[0] = -1;

    int now;

    for (i=200; i>=1; i--){

        for (j=G; j>=0; j--){
            if (!last[j]){
                continue;
            }
            for (k=1; k<=fv[i]; k++){
                now = j + i*k;
                if (now > G){
                    break;
                }
                if (last[now]){
                    break;
                }
                last[now] = i;
            }
        }

    }

    now = 0;

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

    int old = now;

    int cont = 0;

    while (last[now] != -1){
        cont++;
        now = now - last[now];
    }

    cout<<old<<" "<<cont<<'\n';

    while (last[old] != -1){
        cout<<last[old]<<'\n';
        old = old - last[old];
    }

    return 0;
}