讨论 / 大牛们帮忙看看错在哪里,才60分
roy12 2008-08-01 06:56:00
点我顶贴 收藏 删除
var a,v:array[1..1000]of longint;

f:array[0..10000,0..1000]of longint;

i,j,k,t,m,n,ans:longint;

begin

readln(n,m,t);

for i:=1 to n do

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

for i:=1 to n do

for j:=1 to m do

f[i,m]:=-1;

f[0,0]:=0;

for i:=1 to n do

for j:=t-a[i] downto 0 do

for k:=m-1 downto 0 do

if (f[j,k]>=0)and(j+a[i]<=t)and(k+1<=m)

and(f[j,k]+v[i]>f[j+a[i],k+1]) then

f[j+a[i],k+1]:=f[j,k]+v[i];

ans:=0;

for i:=1 to t do

if f[i,m]>ans then ans:=f[i,m];

writeln(ans);

end.

#1 世纪末的魔术师@2008-07-30 04:30:00
回复 删除
f[][]的初值全部赋值为-maxlongint
#2 roy12@2008-07-30 04:45:00
回复 删除
-1不是已经比0小了吗。。。

而且我错的那4个点正确的不是0啊。。。

#3 世纪末的魔术师@2008-07-30 05:03:00
回复 删除
呃。。你试试看嘛。。。。整个f[][]数组都赋值你那程序f[i][m]=-1;
#4 roy12@2008-07-31 04:53:00
回复 删除
试过了 还是一样的。。。。

四个点 W A

#5 wwww@2008-08-01 06:54:00
回复 删除
用一维数组试试
#6 roy12@2008-08-01 06:56:00
回复 删除
....这个是二维费用的背包啊 。。

莫非还有更牛X的解法?。。。

查看更多回复
提交回复