讨论 / 镇住了……
fdiqecvhihrqt 2008-07-27 21:30:00
点我顶贴 收藏 删除
var

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

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

begin

readln(n,v);

for i:=1 to n do begin

readln(m,w,s);

if w<=v then begin

if w*m>v then m:=v div w;{这句可以当作剪枝……第一次竟然写成‘m:=v div m’,我的正确率啊……}

for j:=1 to m do

for k:=v downto w do

if f[k]<f[k-w]+s then f[k]:=f[k-w]+s;

end;

end;

write(f[v]);

end.

#1 vinence@2008-07-27 21:30:00
回复 删除
var

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

m,w,s:array[1..2000] of integer;

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

begin

readln(n,v);

for i:=1 to n do

begin

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

if v div w[i] < m[i] then m[i]:=v div w[i];

end;

for j:=1 to n do

for i:=1 to v do

begin

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

for k:=1 to m[j] do

if i<k*w[j] then break

else if i>=k*w[j] then

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

end;

writeln(f[v,n]);

end.

--------------------------------------------------

有效耗时: 该状态没有记录

测试结果1: 测试结果正确

测试结果2: 测试结果正确

测试结果3: 测试结果正确

测试结果4: 测试结果正确

测试结果5: 测试结果正确

测试结果6: 测试结果正确

测试结果7: 测试结果正确

测试结果8: 测试结果正确

测试结果9: 测试结果正确

测试结果10: 测试结果正确

查看更多回复
提交回复