Pagini recente » Cod sursa (job #10686) | Cod sursa (job #38950) | Cod sursa (job #2126098) | Cod sursa (job #130888) | Cod sursa (job #110024)
Cod sursa(job #110024)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX_N 1005
#define MAX_V 50005
#define FIN "economie.in"
#define FOUT "economie.out"
int N, V[MAX_N], sol[MAX_N], ns;
char can[MAX_V];
int main(void)
{
int i, j;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &N);
for (i = 0; i < N; ++i)
scanf("%d", V+i);
sort(V, V+N);
for (can[0] = 1, i = 0; i < N; ++i)
{
if (can[V[i]]) continue;
sol[ns++] = V[i];
for (j = 0; j+V[i] < MAX_V; ++j)
can[j+V[i]] |= can[j];
for (j = i+1; j < N; ++j)
if (!can[V[j]]) break;
if (j == N) break;
}
printf("%d\n", ns);
for (i = 0; i < ns; ++i)
printf("%d\n", sol[i]);
return 0;
}