Pagini recente » Cod sursa (job #1460594) | Cod sursa (job #246515) | Cod sursa (job #671963) | Cod sursa (job #3003652) | Cod sursa (job #3162486)
#include <fstream>
#include <algorithm>
#include <climits>
using namespace std;
ifstream fin ("economie.in");
ofstream fout("economie.out");
int n,i,j,v[1001];
int dp[50001];
int sol[1001];
int minim=INT_MAX;
int nr;
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
sort(v+1, v+n+1);
for(i=1;i<=v[n];i++)
dp[i]=-1;
for(i=1;i<=n;i++)
if(dp[v[i]]==-1) ///nu a fost obtinuta submultimea de suma v[i]
{
sol[++nr]=v[i]; ///selctez elementul v[i]
for(j=0;j<=v[n]-v[i];j++) ///determin toate submultimile ce pot fi obtinute adaugand v[i] la submultimi determinte anterior
if(dp[j]!=-1) ///a fost obtinuta anterior submultimea de suma j
dp[j+v[i]]=1; /// se obtine submutimea de suma v[i]+j
}
fout<<nr<<'\n';
for(i=1;i<=nr;i++)
fout<<sol[i]<<'\n';
return 0;
}