Cod sursa(job #3349019)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 24 martie 2026 23:15:56
Problema Ghiozdan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#pragma GCC optimize("Ofast,unroll-loops")
#include <fstream>
#include <algorithm>
#define GMAX 75002
#define NMAX 20002
#define INF (1<<30)
using namespace std;
ifstream  fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
int N,G,vmax,sum,v[NMAX],dp[GMAX],t[GMAX];

void rec(int x)
{
    while(t[x]!=0)
    {
        fout<< x-t[x] << "\n";
        x=t[x];
    }

    fout<< x-t[x] << "\n";
}

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

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

int main()
{
    citire();

    for(int i=1; i<=G; i++)
    {
        dp[i]=INF;
    }

    sort(v+1,v+1+N);

    sum=vmax=0;
    for(int i=N; i>=1; i--)
    {
        for(int j=min(sum,G-v[i]); j>=0; j--)
        {
            if(dp[j]!=INF && dp[j+v[i]]==INF)
            {
                dp[j+v[i]]=dp[j]+1;
                t[j+v[i]]=j;
                vmax=max(vmax,j+v[i]);
            }
        }
        sum+=v[i];
    }

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

    rec(vmax);

    return 0;
}