Cod sursa(job #222854)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 25 noiembrie 2008 19:28:27
Problema Economie Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.15 kb
type vec=array[0..1010]of longint;

var f,g:text;
    v,b:vec;
    n,i,x,l:longint;

procedure quick(l,r:longint);
var i,j,x,aux:longint;
begin
i:=l;
j:=r;
x:=v[(i+j)div 2];
repeat
        while (v[i]<x)do inc(i);
        while (v[j]>x)do dec(j);
        if (i<=j)then
          begin
            aux:=v[i];
            v[i]:=v[j];
            v[j]:=aux;
            inc(i);
            dec(j);
          end;
        until i>j;
if (l<j)then quick(l,j);
if (i<r)then quick(i,r);
end;


procedure rez(x,n:longint;v:vec);
var a:array[0..50010]of byte;
    i,j,k:longint;
begin
a[0]:=1;
for i:=1 to n do
  begin
    k:=0;
    for j:=0 to x-v[i] do
      if (a[j]=1)and(a[v[i]+j]=0)then
        begin
          a[v[i]+j]:=1;
          k:=1;
        end;
    if (k=1)then
      begin
        inc(l);
        b[l]:=v[i];
      end;
  end;
end;



begin
assign(f,'economie.in');
assign(g,'economie.out');
reset(f);
rewrite(g);
read(f,n);
for i:=1 to n do
  begin
    read(f,v[i]);
    if (v[i]>x)then x:=v[i];
  end;
quick(1,n);
rez(x,n,v);
writeln(g,l);
for i:=1 to l do writeln(g,b[i]);
close(f);
close(g);
end.