Cod sursa(job #107977)
Utilizator |
Mircea Pasoi domino |
Data |
20 noiembrie 2007 23:20:45 |
Problema |
Economie |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.76 kb |
#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];
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;
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", i+1);
for (j = 0; j <= i; ++j)
printf("%d\n", V[j]);
return 0;
}