Cod sursa(job #1279097)

Utilizator Master011Dragos Martac Master011 Data 29 noiembrie 2014 19:28:05
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<cstdio>
using namespace std;

FILE *in = fopen("ghiozdan.in","r");
FILE *out = fopen("ghiozdan.out","w");

const int Emax = 201, Gmax = 75001;
int fr[Emax], Nrg[Gmax], Ug[Gmax];

int main (){
    int G,n,nr;
    fscanf(in,"%d%d",&n,&G);

    for(int i = 1 ; i <= n ; i++) fscanf(in,"%d",&nr), fr[nr]++;
    Nrg[0]=1;
    int maxim = 0;
    for(int i = 200 ; i >= 1 ; i--){
        if(fr[i]){
            for(int j = G - i ; j >= 0 ; j--){
                if(Nrg[j]){
                    for(int k = 1 ; k <= fr[i] && j + k*i <= G &&  !Nrg[j + k*i] ; k++){
                        Nrg[j + k*i]=Nrg[j] + k;
                        Ug[j + k*i]=i;
                        maxim=maxim>j+k*i?maxim:j+k*i;
                    }
                }
            }
        }
    }

    fprintf(out,"%d %d\n",maxim,Nrg[maxim]-1);
    for(int i = maxim ; i>0 ; i-=Ug[i]) fprintf(out,"%d\n",Ug[i]);
    return 0;
}