Cod sursa(job #3309128)

Utilizator Lex._.Lex Guiman Lex._. Data 1 septembrie 2025 16:38:40
Problema Economie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
#define NMAX 1001
#define VMAX 50001
using namespace std;

ifstream in("economie.in");
ofstream out("economie.out");

int monezi[NMAX]; ///valoarea fiecarei monezi
int subset[NMAX]; ///monezile alese
bitset<VMAX> dp; ///dp[i]=1 daca putem calcula valoarea i folosind monezile alese pana acum

int main()
{
    int n;
    in >> n;
    for(int i=1; i<=n; i++)
    {
        in >> monezi[i];
    }
    sort(monezi+1, monezi+n+1);
    int nr_min=0; ///numarul minim de monezi care trebuie alese
    dp[0]=1;
    for(int i=1; i<=n; i++)
    {
        if(dp[monezi[i]]==0) ///daca valoarea monezi[i] nu poate fi calculata folosind monezile alese pana acum
        {
            for(int j=monezi[i]; j<VMAX; j++)
            {
                if(dp[j-monezi[i]]==1)
                    dp[j]=1;
            }
            subset[++nr_min]=monezi[i];
        }
    }
    out << nr_min << "\n";
    for(int i=1; i<=nr_min; i++)
        out << subset[i] << "\n";

    return 0;
}