dp,设f[i,j,k]为前i首曲子放在前j个CD中,且最后一个CD剩下k分钟
{
ID:lucky141
PROG:rockers
LANG:PASCAL
}
program rockers;
var
f:array[0..20,0..20,0..20] of integer;
a:array[1..20] of integer;
n,m,t,i,j,k:integer;
function max(p,q:integer):integer;
begin
if p>q then max:=p
else max:=q;
end;
begin
assign(input,'rockers.in');
reset(input);
assign(output,'rockers.out');
rewrite(output);
fillchar(f,sizeof(f),0);
readln(n,t,m);
for i:=1 to n do
read(a[i]);
readln;
for i:=1 to n do
for j:=1 to m do
for k:=1 to t do
begin
f[i,j,k]:=max(f[i,j,k-1],f[i-1,j,k]);//不取第i首曲子
if a[i]<=k then//取第i首曲子
begin
f[i,j,k]:=max(f[i,j,k],f[i-1,j,k-a[i]]+1);
f[i,j,k]:=max(f[i,j,k],f[i-1,j-1,t]+1);//开一个新盘,
end;
end;
writeln(f[n,m,t]);
close(input);
close(output);
end.