讨论 / 程序改错题...
小岛 2008-10-19 03:51:00
点我顶贴 收藏 删除
采药...

一下这段代码可以得40分...

你知道这段代码哪里出现错误了吗?

const

nmax=100;

mmax=1000;

type

int=longint;

var

Dp:array[0..nmax,0..mmax] of int;

C:array[1..nmax] of int;

V:array[1..nmax] of int;

n,m,i,j:int;

ans:int;

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

begin

if a>b then exit(a)

else exit(b);

end;

begin

readln(m,n);

for i:=1 to n do

readln(C[i],V[i]);

for i:=1 to n do

for j:=C[i] to m do

dp[i,j]:=max(dp[i-1,j],dp[i-1,j-C[i]]+V[i]);

for j:=0 to m do

ans:=max(ans,dp[n,j]);

write(ans);

readln(n);

end.

#1 xiaokeke@2008-10-18 23:53:00
回复 删除
采药不是01背包么?

01背包第二重循环要downto的

#2 xiaokeke@2008-10-19 00:08:00
回复 删除

我看错了,还以为你用一维写的呢,SORRY^

你第二重循环j小于c[i]的时候直接dp[i,j]:=dp[i-1,j];

这样改改是不是行?

#3 lychees@2008-10-19 03:51:00
回复 删除
哎呀...谢谢拉~~

我破坏了这个数组的最优子结构...

查看更多回复
提交回复