为防止广告,目前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]);