为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。
二维费用背包
来自NOCOW
[编辑] 代码
下面是代码,认为不好的可以完善
program didi; var
a:array[1..1000] of longint; f:array[1..1000,1..1000,1..1000] of longint; v,vv:array[1..1000] of longint;
begin
read(n,v1,v2); for i:=1 to n do read(a[i],v[i],vv[i]); for i:=1 to n do for j:=v1 downto v[i] do for k:=v2 downto vv[i] do f[i,j,k]:=max(f[i-1,j,k],f[i,j-v[i],k-vv[i]]+a[i]); write(f[n,v1,v2]);
end.
完全背包的方式变一下
for i:=1 to n do for j:=v[i] downto v1 do for k:=vv[i] downto v2 do f[i,j,k]:=max(f[i-1,j,k],f[i,j-v[i],k-vv[i]]+a[i]);
变成二维的数组就是:
int f[v1][v2]; for(i=1;i<=n;i++) for(j=v1;j>=v[i];j--) for(k=v2;k>=vv[i];k--) f[j][k]=max(f[j][k],f[j-v[i]][k-vv[i]]+a[i]);