讨论 / 怎么超时呢?才50……哪位大牛有更好的办法呀?
qdzcslj 2010-04-14 20:00:00
点我顶贴 收藏 删除
type data=record

m:longint;

w:longint;

s:longint;

end;

var f:array[0..2000,0..500] of longint;

a:array[1..2000] of data;

k,v,n,i,j:longint;

begin

readln(n,v);

for i:=1 to n do

readln(a[i].m,a[i].w,a[i].s);

fillchar(f,sizeof(f),0);

for i:=1 to n do

for j:=1 to v do begin

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

for k:=1 to a[i].m do

if (j-a[i].w*k>=0) then

if f[i-1,j-a[i].w*k]+a[i].s*k>f[i,j] then f[i,j]:=f[i-1,j-a[i].w*k]+a[i].s*k;

end;

writeln(f[n,v]);

end.

#1 fjxmlhx@2008-05-10 23:01:00
回复 删除
var

n,m,s,w,ans,v,i,j,k:longint;

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

begin

readln(n,v);

ans:=0;

for i:=1 to n do

begin

readln(m,w,s);

for j:=v downto 1 do

for k:=0 to m do

if w*k>j then break else

if f[j]<f[j-w*k]+s*k then

f[j]:=f[j-w*k]+s*k;

end;

writeln(f[v]);

end.

加点剪枝啦..

#2 qdzcslj@2008-05-17 07:49:00
回复 删除
谢谢大牛指点,又长知识了!!
#3 qdzcslj@2008-05-17 20:14:00
回复 删除
不好意思大牛,方法程序是简单了,但还是50分阿……
#4 zjh0128@2010-04-14 20:00:00
回复 删除
少了 fillchar(f,sizeof(f),0);
查看更多回复
提交回复