讨论 / 哪里错了?
419488575 2008-08-03 01:47:00
点我顶贴 收藏 删除
我的代码是

program exale;

var i,j,n:integer;

a,m:byte;

v,s:array[1..25] of word;

p:array[1..25] of byte;

t:array[1..10000] of longint;

begin

readln(n,m);

for a:=1 to m do

begin

readln(v[a],p[a]);

s[a]:=v[a]*p[a];

end;

fillchar(t,sizeof(t),0);

for i:=1 to m do

for j:=n downto 1 do

begin

if (v[i]<=j) and (t[j-v[i]]+s[i]>t[j]) then

t[j]:=t[j-v[i]]+s[i];

end;

write(t[n]);

end.

#1 lychees@2008-08-02 05:26:00
回复 删除
for j:=n downto 1 do

问题应该出在这里了...

#2 Jollwish@2008-08-02 06:58:00
回复 删除
应该是for j:=n downto v[i] do
#3 wish@2008-08-02 07:00:00
回复 删除
t:array[1..10000] of longint;

改成:

t:array[0..10000] of longint;

#4 419488575@2008-08-03 01:28:00
回复 删除
不是

按你们说的改了之后

还是

测试结果1: 通过本测试点|有效耗时172:ms

测试结果2: 通过本测试点|有效耗时63:ms

测试结果3: 通过本测试点|有效耗时63:ms

测试结果4: 通过本测试点|有效耗时62:ms

测试结果5: 运行错误|普通保护错误

测试结果6: 运行错误|普通保护错误

测试结果7: 运行错误|普通保护错误

测试结果8: 运行错误|普通保护错误

测试结果9: 运行错误|普通保护错误

测试结果10: 通过本测试点|有效耗时63:ms

#5 wish@2008-08-03 01:47:00
回复 删除
哎呀你范围搞错了

t:array[0..30000] of longint;

AC 吧

查看更多回复
提交回复