Cod sursa(job #18134)

Utilizator andrewgPestele cel Mare andrewg Data 18 februarie 2007 09:55:38
Problema Ghiozdan Scor 32
Compilator fpc Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 1.13 kb
const maxn = 20000;
      maxm = 75000;
      inf = 2000000000;

var f:text;
    n,m,i,j,t,max,maxi:longint;
    a:array[1..maxn]of longint;
    d,l:array[0..maxn]of longint;

procedure readdata;
begin
   assign(f,'ghiozdan.in');
   reset(f);
   readln(f,n,m);
   for i:=1 to n do
   begin
      readln(f,a[i]);
   end;
   close(f);
end;

procedure solve;
var k:longint;
begin
   max:=0;
   for i:=1 to m do d[i]:=inf;
   d[0]:=0;
   l[0]:=0;
   for i:=n downto 1 do
   begin
      for j:=max downto 0 do
      begin
         if (d[j]+1<d[j+a[i]]) and (j+a[i]<=m) then
         begin
            d[j+a[i]]:=d[j]+1;
            l[j+a[i]]:=i;
            if j+a[i]>max then
            begin
               max:=j+a[i];
            end;
         end;
      end;
      t:=t+a[i];
      if t>m then t:=m;
   end;
end;

procedure writedata;
begin
   assign(f,'ghiozdan.out');
   rewrite(f);
   writeln(f,max,' ',d[max]);
   i:=l[max];
   while max<>0 do
   begin
      writeln(f,a[i]);
      max:=max-a[i];
      i:=l[max];
   end;
   close(f);
end;

begin
   readdata;
   solve;
   writedata;
end.