Pagini recente » Cod sursa (job #3223228) | Cod sursa (job #1407305) | Cod sursa (job #2478344) | Cod sursa (job #1454431) | Cod sursa (job #2394901)
#include <fstream>
#include <vector>
#include <algorithm>
#define indAnt first
#define monedaAdaugata second
using namespace std;
ifstream fin("economie.in");
ofstream fout("economie.out");
int n,i,j,d[50003],v[1003],maxim,sol,poz,nr;
pair<int,int> t[50003];
int SOL[50003];
int main(){
fin>>n;
for(i=1;i<=n;i++){
fin>>v[i];
maxim=max(maxim,v[i]);
}
for(i=1;i<=maxim;i++)
d[i]=10000000;
for(i=1;i<=maxim;i++){
//fout<<"suma "<<i<<"poate fi obt din "<<d[i]<<"monede\n";
for(j=1;j<=n;j++){
//fout<<'\t'<<"incercam moneda j="<<j<<"de masa"<<v[j]<<"\n";
if(i>=v[j]){
//fout<<'\t'<<'\t'<<"o putem inlocui"<<"\n";
//fout<<d[i]<<" "<<d[j]<<"\n";
if(d[i-v[j]]+1<d[i]){
d[i]=d[i-v[j]]+1;
t[i].indAnt=i-v[j];
t[i].monedaAdaugata=v[j];
}
}
}
}
// for(i=1;i<=maxim;i++)
// fout<<d[i]<<" "<<t[i].indAnt<<" "<<t[i].monedaAdaugata<<"\n";
for(i=1;i<=n;i++){
poz=t[i].indAnt;
while(poz!=0){
if(SOL[t[poz].monedaAdaugata]==0)nr++;
SOL[t[poz].monedaAdaugata]=1;
poz=t[poz].indAnt;
}
}
fout<<nr<<"\n";
for(i=1;i<=n;i++)
if(SOL[i]==1)
fout<<i<<" ";
return 0;
}