fork download
  1. program menu;
  2. Uses math;
  3. const
  4. MAX=5005;
  5. var
  6. N,B,i,j : integer;
  7. Prezzo:array[1..MAX] of integer;
  8. tab:array[0..MAX,0..MAX] of integer;
  9. preso:array[1..MAX] of boolean;
  10. uscita:boolean;
  11. begin
  12. readln(N,B);
  13. for i:=1 to N do readln(Prezzo[i]);
  14. for i:=0 to B do tab[0,i]:=0;
  15. for i:=0 to N do tab[i,0]:=0;
  16. for i:=1 to N do
  17. for j:=1 to B do
  18. begin
  19. if j>Prezzo[i] then tab[i,j]:=tab[i-1,j]
  20. else
  21. begin
  22. if tab[i-1,j] >tab[i-1,j-Prezzo[i]] then tab[i,j]:=tab[i-1,j]
  23. else tab[i,j]:=tab[i-1,j-Prezzo[i]];
  24. end;
  25. end;
  26. i:=N; j:=B;
  27. while (i>0) and (j>0) do
  28. begin
  29. if tab[i,j]<>tab[i-1,j] then begin i:=i-1; j:=j-Prezzo[i]; writeln(Prezzo[i]);end
  30. else i:=i-1;
  31. end;
  32. for i:=1 to N do
  33. begin
  34. for
  35. j:=0 to B do write(tab[i,j],' ');
  36. writeln;
  37. end;
  38. end.
  39.  
Success #stdin #stdout 0.01s 5280KB
stdin
3 100
30
40
50
stdout
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0