Pagini recente » Cod sursa (job #1729732) | Cod sursa (job #1305155) | Cod sursa (job #1275906) | Cod sursa (job #668431) | Cod sursa (job #1336100)
#include <stdio.h>
#define MAXN 1000
#define MAXV 50000
int v[MAXN], rez[MAXN], dr = 0;
char bun[MAXV + 1];
void qs(int st, int dr){
int i = st, j = dr, piv = v[(st + dr) / 2], aux;
while(i <= j){
while(v[i] < piv)
i++;
while(v[j] > piv)
j--;
if(i <= j){
aux = v[i];
v[i] = v[j];
v[j] = aux;
i++;
j--;
}
}
if(st < j)
qs(st, j);
if(i < dr)
qs(i, dr);
}
int main(){
FILE *in = fopen("economie.in", "r");
int n, i, j;
fscanf(in, "%d", &n);
for(i = 0; i < n; i++)
fscanf(in, "%d", &v[i]);
fclose(in);
qs(0, n - 1);
bun[0] = 1;
for(i = 0; i < n; i++){
if(!bun[v[i]]){
rez[dr] = v[i];
dr++;
for(j = 0; j <= MAXV; j++){
if(bun[j] && j + v[i] <= MAXV)
bun[j + v[i]] = 1;
}
}
}
FILE *out = fopen("economie.out", "w");
fprintf(out, "%d\n", dr);
for(i = 0; i < dr; i++)
fprintf(out, "%d\n", rez[i]);
fclose(out);
return 0;
}