Pagini recente » Cod sursa (job #1862499) | Cod sursa (job #2728471) | Cod sursa (job #2722630) | Cod sursa (job #2728480) | Cod sursa (job #2515937)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("economie.in");
ofstream out("economie.out");
const int lim=1e3+3;
const int lim2=5e4+3;
int w[lim];
int v[lim];
int f[lim2];
int invers[lim2];
int main()
{
ios_base::sync_with_stdio(false);
in.tie(0),out.tie(0);
int n,maxx=-1;
in>>n;
for(int i=1;i<=n;++i)
in>>w[i];
sort(w+1,w+n+1);
int nr=1;
v[nr]=w[1];
for(int i=2;i<=n;++i)
{
if(w[i]!=w[i-1])
++nr,v[nr]=w[i];
}
n=nr;
for(int i=1;i<=n;++i)
{
invers[v[i]]=i;
if(v[i]>maxx)
maxx=v[i];
}
f[0]=1;
int cnt=0;
for(int i=1;i<=n;++i)
if(v[i]!=-1)
{
++cnt;
for(int j=0;j<=maxx;++j)
if(f[j]==1)
{
if(invers[j]>0 and invers[j]>=i+1)
v[invers[j]]=-1;
if(j+v[i]<=maxx)
f[j+v[i]]=1;
}
}
out<<cnt<<endl;
for(int i=1;i<=n;++i)
if(v[i]!=-1)
out<<v[i]<<endl;
return 0;
}