Pagini recente » Cod sursa (job #1144540) | Cod sursa (job #2505544) | Cod sursa (job #1796540) | Cod sursa (job #1297859) | Cod sursa (job #426865)
Cod sursa(job #426865)
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("economie.in");
ofstream g("economie.out");
int sol[1005],V[1005];
bitset<50001> Din;
int N,cnt,vf,h;
int main()
{
int i,j;
f >> N;
for (i=1;i<=N;i++)
f >> V[i];
sort(V+1,V+N+1);
Din[0] = 1; //e clar
for(i=1;i<=N;i++)
if(Din[V[i]]==0)
{
sol[++cnt]=V[i]; //bagi in solutie daca nu se poate forma suma V[i]
for(j=0;j<=V[N];j++) //cauti crescator sumele pe care le poti forma cu V[i]
//pentru ca poti folosi o moneda de mai multe ori
if(Din[j] && j+V[i]<=V[N]) //pana nu depasesti valoarea maxima a monedelor
Din[j+V[i]]=1; //le marchezi
}
g << cnt << "\n";
for (i=1;i<=cnt;i++) g<< sol[i] << "\n";
return 0;
}