var
f:array[0..5000,0..50]of longint;
k,v,n,i,j,m,p,q,l,r:longint;
a,b:array[1..200]of integer;
c,d:array[1..50]of longint;
begin
readln(k,v,n);
filldword(f,sizeof(f) div 4,2*maxlongint-555555555);
for i:=1 to n do
readln(a[i],b[i]);
f[0,0]:=0; f[0,1]:=0;
for i:=1 to n do
for j:=v downto a[i] do
if f[j-a[i],1]>=0 then
begin
l:=1; r:=1;
for m:=1 to k do
begin
c[m]:=f[j-a[i],m]+b[i];
d[m]:=f[j,m];
if c[l]>d[r] then
begin f[j,m]:=c[l]; inc(l); end
else
begin f[j,m]:=d[r]; inc(r); end;
end;
end;
p:=0;
for i:=1 to k do
p:=p+f[v,i];
write(p);
end.
只过了前四个点,第六个点错误 错误结果为:120448
正确结果应为:163361
其他点 无输出|运行超时
各位大牛帮帮忙
var f:array[0..5000,0..100]of longint;
q,p:array[0..5000]of longint;
k,v,n,i,j,dt,w,c,l,r:longint;
begin
readln(k,v,n);
for i:=0 to v do
for j:=1 to k do f[i,j]:=-maxint;
f[0,1]:=0;
for i:=1 to n do
begin
readln(w,c);
for j:=v downto w do
if f[j-w,1]>=0 then
begin
l:=1;r:=1;
for dt:=1 to k do
begin
q[dt]:=f[j-w,dt]+c;
p[dt]:=f[j,dt];
if p[l]>=q[r] then
begin f[j,dt]:=p[l]; inc(l); end
else
begin f[j,dt]:=q[r]; inc(r); end;
end;
end;
end;
w:=0;
for dt:=1 to k do inc(w,f[v,dt]);
writeln(w);
end.
谢谢你的思路的提醒,你把初始化改改,你看我这个就AC了