67 lines
967 B
ObjectPascal
67 lines
967 B
ObjectPascal
Program tsoi_standard;
|
|
{ tsoi2 Diablo }
|
|
|
|
Const
|
|
inf ='diablo.in';
|
|
ouf ='diablo.out';
|
|
LimitN =100;
|
|
LimitM =500;
|
|
LimitP =50;
|
|
|
|
Var
|
|
f,d :array[0..LimitN,0..LimitM]of longint;
|
|
c :array[1..LimitN]of longint;
|
|
w :array[1..LimitP]of longint;
|
|
i,j,k :longint;
|
|
p,t :longint;
|
|
n,m :longint;
|
|
|
|
procedure show(x,y:longint);
|
|
var
|
|
t :longint;
|
|
begin
|
|
if x>1 then
|
|
show(x-1,y-d[x][y]*c[x]);
|
|
writeln(d[x][y]);
|
|
end;
|
|
|
|
Begin
|
|
assign(input,inf);
|
|
reset(input);
|
|
read(n,m);
|
|
for i:=1 to n do
|
|
begin
|
|
read(c[i],p);
|
|
for j:=1 to p do
|
|
read(w[j]);
|
|
for j:=1 to m do
|
|
begin
|
|
t:=0;
|
|
f[i][j]:=f[i-1][j];
|
|
for k:=1 to p do
|
|
begin
|
|
inc(t,c[i]);
|
|
if t>j then break;
|
|
if f[i-1][j-t]+w[k]>f[i][j] then
|
|
begin
|
|
f[i][j]:=f[i-1][j-t]+w[k];
|
|
d[i][j]:=k;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
close(input);
|
|
assign(output,ouf);
|
|
rewrite(output);
|
|
k:=-1;
|
|
for i:=0 to m do
|
|
if f[n][i]>k then
|
|
begin
|
|
k:=f[n][i];
|
|
j:=i;
|
|
end;
|
|
writeln(f[n][j]);
|
|
show(n,j);
|
|
close(output);
|
|
End.
|