Cod sursa(job #3349010)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 24 martie 2026 22:52:46
Problema Ghiozdan Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#define NMAX 1005
#define INF (1<<30)
using namespace std;
ifstream  fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
int N,G,v[NMAX],dp[NMAX],pred[NMAX][NMAX];

void citire()
{
    fin>>N>>G;

    for(int i=1; i<=N; i++)
    {
        fin>>v[i];
    }
}

void traseu(int nr, int g)
{
    if(!nr)
    {
        return;
    }

    traseu(nr-1,pred[nr][g]);
    fout<< g-pred[nr][g] << "\n";
}

int main()
{
    citire();

    for(int i=0; i<NMAX; i++)
    {
        dp[i]=INF;
    }

    dp[0]=0;
    for(int i=1; i<=N; i++)
    {
        for(int j=G-v[i]; j>=0; j--)
        {
            if(dp[j]!=INF)
            {
                if(dp[j+v[i]]>dp[j]+1)
                {
                    dp[j+v[i]]=dp[j]+1;
                    pred[dp[j+v[i]]][j+v[i]]=j;
                }
            }
        }
    }

    int g=G;
    for(int i=G; i>=1; i--)
    {
        if(dp[i]!=INF)
        {
            g=i;
            break;
        }
    }

    fout<< g << " " << dp[g] << "\n";

    traseu(dp[g],g);

    return 0;
}