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