讨论 / 为什么只有70分
tian 2008-04-02 03:33:00
点我顶贴 收藏 删除
program dddd;

var a,b,c:array[1..1000]of longint;

s:array[0..1000000]of longint;

n,v,i,j,r,we:longint;

begin

fillchar(s,sizeof(s),0);

read(n,v);

for i:= 1to n do

read(a[i],b[i],c[i]);

for i:= 1to n do

begin

if v>=b[i] then

begin

we:=v div b[i];

if we>a[i] then

we:=a[i];

for j:= 1to we do

begin

for r:=v downto 0 do

if r>=b[i] then

begin

if s[r]<s[r-b[i]]+c[i] then

s[r]:=s[r-b[i]]+c[i];

end

else break;

end;

end;

end;

write(s[v]);

end.

#1 txyx@2008-04-02 03:33:00
回复 删除
似乎是j循环和r循环次序倒了

相当于一个分组背包,在1..k件物品i中取个最优解

查看更多回复
提交回复