Cod sursa(job #3246720)

Utilizator stefan_ciureaStefan Ciurea stefan_ciurea Data 4 octombrie 2024 10:25:17
Problema Ghiozdan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
using namespace std;

const int Gmax=75005,NRGmax=205;

int dp[Gmax],frg[NRGmax],sol[Gmax];

int main()
{
    ifstream fin("ghiozdan.in");
    ofstream fout("ghiozdan.out");
    int n,g,maxg=0,maxs=0;
    fin>>n>>g;
    for(int i=1; i<=n; ++i){
        int a;
        fin>>a;
        maxg=max(maxg,a);
        frg[a]++;
    }
    dp[0]=1;
    for (int i=maxg; i>=1; --i) {
        if (frg[i]>0) {
            for (int j=g-i; j>=0; --j) {
                if(dp[j]>0) {
                    for (int k=1; k<=frg[i] && j+k*i<=g && dp[j+k*i]==0; k++) {
                        dp[j+k*i]=dp[j+(k-1)*i]+1;
                        sol[j+k*i]=i;
                        maxs=max(maxs,j+k*i);
                    }
                }
            }
        }
    }
    fout<<maxs<<' '<<dp[maxs]-1<<endl;
    for (int i=maxs; i>0; i-=sol[i]) {
        fout<<sol[i]<<endl;
    }
    return 0;
}