Pagini recente » Cod sursa (job #3327888) | Cod sursa (job #1316890) | Cod sursa (job #2251329) | Cod sursa (job #969122) | Cod sursa (job #3309128)
#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;
}