Pagini recente » Cod sursa (job #2129896) | Cod sursa (job #1081622) | Monitorul de evaluare | Cod sursa (job #2688505) | Cod sursa (job #18608)
Cod sursa(job #18608)
const
NMAX = 75000;
infinit = 1000000000;
FIN = 'ghiozdan.in';
FOUT = 'ghiozdan.out';
var A : array[ 0..1, 0..NMAX ] of longint;
V, C : array[ 1..200 ] of longint;
M : array[ 0..NMAX ] of longint;
sel : array[ 1..200 ] of longint;
n, t, mint, k, p, x, o, oo : longint;
f, g : text;
procedure read_Data;
var i : longint;
begin
assign( f, FIN ); reset( f );
readln( f, n, T ); k := 0;
for i := 1 to n do
begin
read( f, x );
inc( sel[x] );
end;
n := 0;
for i := 1 to 200 do
if sel[i] > 0 then
begin
inc( n ); v[n] := i; c[n] := sel[i];
end;
close( f );
end;
function MIN( a, b : longint ) : longint;
begin
if a < b then MIN := a else MIN := b;
end;
procedure dinamica2;
var i, j, k : longint;
begin
o := 0; oo := 1;
A[0,0] := 0;
for i := 1 to T do A[o][i] := infinit;
for j := 1 to n do
begin
for i := 0 to T do
begin
A[oo][i] := A[o][i];
for k := 1 to C[j] do
if i - k * v[j] >= 0 then A[oo][i] := MIN( A[o][ i - k * v[j] ] + k, A[oo][i] )
else break;
end;
o := 1 - o;
oo := 1 - oo;
end;
for i := T downto 1 do
if A[o][i] <> infinit then begin p := i; break; end;
end;
procedure save;
begin
assign( g, FOUT ); rewrite( g );
writeln( g, p,' ',A[o][p] );
close( g );
end;
begin
read_data;
dinamica2;
save;
end.