讨论 / 有区别吗?为什么只是第一个过
yanlimin 2013-10-03 03:36:00
点我顶贴 收藏 删除
i,j,m,n:longint;

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

w,c:array[0..100000] of longint;

function max(x,y:longint):longint;

begin

if x>y then

exit(x)

else

exit(y);

end;

begin

readln(m,n);

for i:=1 to n do

readln(w[i],c[i]);

for i:=1 to n do

for j:=m downto 0 do

if j>=w[i] then

f[i,j]:=max(f[i-1,j-w[i]]+c[i],f[i-1,j])

else

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

writeln(f[n,m]);

end.

var i,j,n,t:longint;

v,w,f:array[1..100]of longint;

function max(i,j:longint):longint;

begin if i>j then exit(i)

else exit(j); end;

begin

read(t,n);

for i:= 1 to n do

read(v[i],w[i]);

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

for i:= 1 to n do

for j:= t downto v[i] do

f[j]:=max(f[j-v[i]]+w[i],f[j]);

writeln(f[t]);

end.

#1 chenghao@2013-10-02 21:46:00
回复 删除
只是一道很简单的背包问题,我们是动归思想

1、 阶段i:前i个物品中选取物品放入到背包中。

2、 状态c[I,j]:前i个物品中选取物品放入到容量为j的背包中所能获得的最大价值。

3、 动规方程:c[I,0]=0;c[0,i]=0

c[I,j]=max{c[i-1,j-w[i]]+p[i](j>=w[i]),c[i-1,j]}

(1<=i<=n, 1<=j<=m)

Answer:c[n,m]

#2 yanlimin@2013-10-03 03:36:00
回复 删除
第二个也是啊
#3 Coldstudy@2013-11-19 04:50:35
回复 删除
...
查看更多回复
提交回复