Cod sursa(job #3161737)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 27 octombrie 2023 20:24:36
Problema Ghiozdan Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>

#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

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

const int NMAX=75e3+5;
const int NMAX2=2e2+5;

const int INF=2e9;

int dp[NMAX];
int viz[NMAX];
int frecv[NMAX2];

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);

    int n,g,i,j,k;
    fin>>n>>g;
    for(i=1;i<=n;i++)
    {
        int x;
        fin>>x;
        frecv[x]++;
    }
    for(i=1;i<=g;i++)
        dp[i]=INF;
    for(i=g;i>=1;i--)
    {
        for(j=g;j>=0;j--)
        {
            if(dp[j]==INF)
                continue;
            for(k=1;k<=frecv[i];k++)
            {
                if(k*i+j<=g)
                {
                    if(dp[k*i+j]!=INF)
                        break;
                    dp[k*i+j]=dp[j]+k;
                    viz[k*i+j]=i;
                }
                else
                    break;
            }
        }
    }
    for(i=g;i>=0;i--)
        if(dp[i]!=INF)
            break;
    fout<<i<<" "<<dp[i]<<"\n";
    int ind=i;
    while(dp[i]--)
    {
        fout<<viz[ind]<<"\n";
        ind=ind-viz[ind];
    }
    fin.close();
    fout.close();
    return 0;
}