level 1
明显的无限背包
var
v,t:array[1..10000] of longint;
f,s,p:array[0..10000] of longint;
x:array[0..10000,0..10000] of longint;
i,j,k,m,n:longint;
begin
assign(input,'tiancai.in');reset(input);
assign(output,'tiancai.out');rewrite(output);
readln(m,n);
for i:=1 to m do
read(t[i]);readln;
for i:=1 to m do
read(v[i]);
fillchar(f,sizeof(f),0);
fillchar(s,sizeof(s),0);
fillchar(x,sizeof(x),0);
for i:=1 to m do
for j:=t[i] to n do
if f[j]<f[j-t[i]]+v[i] then
begin
f[j]:=f[j-t[i]]+v[i];
s[j]:=s[j-t[i]]+1;
for k:=1 to s[j-t[i]] do
x[j,k]:=x[j-t[i],k];
x[j,s[j]]:=i;
end;
writeln(f[n]);
fillchar(p,sizeof(p),0);
for i:=1 to s[n] do
inc(p[x[n,i]]);
for i:=1 to m do
if p[i]<>0 then writeln(i,' ',p[i]);
close(input);close(output);
end.
额 没有优化 具体的自己剪枝
2010年02月23日 15点02分