讨论 / 为什么出错了?谁能帮帮我??
wbx5223166 2008-10-24 19:16:00
点我顶贴 收藏 删除
以下是我自己的程序:

program jm;

var

n,m,i,j:integer;

zy:longint;

w,jq:array [1..25] of integer;

f:array [0..2500]of longint;

function max(a1,b1:longint):longint;

begin

if a1<=b1 then max:=b1

else max:=a1;

end;

procedure bb(b,a:longint);

begin

for i:=1 to m do

f[i-1]:=max(f[i-1],f[n-jq[i]]+a);

end;

{main}

begin

assign(input,’jm.txt’);

assign(output,’jmout.txt’);

reset(input);rewrite(output);

f[0]:=0;

readln(n,m);

for i:=1 to m do readln(jq[i],w[i]);

for j:=1 to m do bb(n,(w[j]*jq[j]));

writeln(f[m-1]);

readln;

close(input);close(output);

end.

用样例计算出的结果老是2000,晕啊,请问是什么问题?

另外,这是别人的程序:

program jm;

type xy=record

x,y:longint;

end;

var i,j,n,m,k:longint;

a:array[1..30] of xy;

f:array[0..30,0..30002] of longint;

function max(a,b:longint):longint;

begin

if a>b then

max:=a

else max:=b;

end;

begin

readln(n,m);

for i:=1 to m do

readln(a[i].x,a[i].y);

for i:=1 to m do

for j:=1 to n do

if j>=a[i].x then

f[i,j]:=max(f[i-1,j-a[i].x]+a[i].x*a[i].y,f[i-1,j])

else

f[i,j]:=f[i-1,j];

writeln(f[m,n]);

end.

请问这段程序中

for i:=1 to m do

for j:=1 to n do

if j>=a[i].x then

f[i,j]:=max(f[i-1,j-a[i].x]+a[i].x*a[i].y,f[i-1,j])

else

f[i,j]:=f[i-1,j];

是什么意思?谁能给我详细讲一下啊,谢谢了

还有为什么要从1到n??

#1 Jollwish@2008-09-19 07:11:00
回复 删除
天...

这不就完了:

var n,m,i,j:longint;

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

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

begin

readln(n,m);

for i:=1 to m do

begin

readln(t[i],f[i]);

f[i]:=f[i]*t[i];

end;

for i:=1 to m do

for j:=n downto t[i] do

if a[j]<a[j-t[i]]+f[i] then a[j]:=a[j-t[i]]+f[i];

write(a[n]);

end.

参见背包就将

#2 gaojianzhe8@2008-10-24 19:16:00
回复 删除
也不好事啊
查看更多回复
提交回复