讨论 / 救命啊
peterjiang 2009-02-16 05:33:00
点我顶贴 收藏 删除
program ss;

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

其他点 无输出|运行超时

各位大牛帮帮忙

#1 lizhixin@2008-10-21 05:23:00
回复 删除
你初始化太费时
#2 lizhixin@2008-10-21 05:34:00
回复 删除
program v123;

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了

#3 xxwzy@2009-02-16 05:33:00
回复 删除
变相抄袭??
查看更多回复
提交回复