讨论 / 背包错了?诚心拜求高手指导
WIngfly 2008-06-13 02:56:00
点我顶贴 收藏 删除
program y08m5d8;

var a:array [0..30010,0..30]of longint;v,p:array [1..30] of integer;

i,j,n,m:integer;

begin

read(n,m);

for i:=1 to m do begin read(v[i],p[i]);p[i]:=p[i]*v[i];end;

for i:=0 to m do

a[0,m]:=0;

for i:=0 to n do

a[i,0]:=0;

for i:=1 to m do

for j:=1 to n do

begin

if(j>=v[i])and((a[j-v[i],i-1]+p[i])>=a[j,i-1])

then a[j,i]:=a[j-v[i],i-1]+p[i]

else a[j,i]:=a[j,i-1];

end;

write(a[n,m]);

end.

#1 Cynical@2008-06-13 02:56:00
回复 删除
这是我的,你对比看看!

type xy=record

x,y:longint;

end;

var i,j,n,m,k:longint;

a:array[1..30] of xy;

f:array[0..30,0..30002] of longint;

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

begin

if a>b then

max:=a

else max:=b;

end;

begin

readln(n,m);

for i:=1 to m do

readln(a[i].x,a[i].y);

for i:=1 to m do

for j:=1 to n do

if j>=a[i].x then

f[i,j]:=max(f[i-1,j-a[i].x]+a[i].x*a[i].y,f[i-1,j])

else

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

writeln(f[m,n]);

end.

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

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

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

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

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

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

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

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

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

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

查看更多回复
提交回复