Cod sursa(job #2422358)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 18 mai 2019 15:18:21
Problema Ghiozdan Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#define INF 2000000000
#define DIM 210
#define DIMG 80000
using namespace std;

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

int f[DIM],d[DIMG],ant[DIMG];
int g,n,i,j,t,maxi,x;

int main (){

    fin>>n>>g;
    for (i=1;i<=n;i++){
        fin>>x;
        f[x]++;
    }
    /// d[i][j] - nr min de obiecte pt a obtine greutatea j folosind\
    doar obicte cu greutatea <= i
    for (j=0;j<=g;j++)
        d[j] = INF;
    d[0] = 0;
    for (i=200;i;i--){
        if (!f[i]) /// nu are sens sa il mai iau in calcul daca nu apare
            continue;
        for (j=g;j>=0;j--){
            if (d[j] != INF){
                for (t=1;t<=f[i];t++){
                    if (j+i*t > g)
                        break;
                    if (d[j+i*t] != INF)
                        continue;
                    maxi = max (maxi,j+i*t);
                    d[j+i*t] = d[j]+t;
                    ant[j+i*t] = i;
                }}}}

    fout<<maxi<<" "<<d[maxi]<<"\n";
    x = maxi;
    while (x){
        fout<<ant[x]<<"\n";
        x -= ant[x];
    }


    return 0;
}