如果我知道每个项目的成本,可以生产多少项目

时间:2012-12-04 19:33:42

标签: algorithm

假设我有两个资源X, Y,其数量众所周知。接下来我有n个项目,其中每个项目由成本描述:x, y。如何判断我可以生产多少件物品(最多)?我会很感激任何伪代码或c / c ++算法,这有助于我确定。

1 个答案:

答案 0 :(得分:1)

您可以使用带有3D空间的背包而不是2D来解决它。

在这里,每个项目的“利润”是1,并且您尝试最大化它。权重是每个项目的对(x,y)。

3D背包的想法是一样的,但在递归步骤中有一个额外的维度。 This thread完全讨论了这个问题。

针对问题的DP解决方案的递归公式(假设整数x,y)是(取自引用问题的答案):

f(item,cost1,cost2) = max {
               f(item-1,cost1,cost2), 
               f(item,cost1-firstCost[i],cost2-secondCost[i]) + profit[i]
                          }

让我们用你的例子来做:

X = 3 Y = 6; item1 = (3,3), item2 = (1,3), item3 = (2,2).

f(3,3,6) = max { f(2,3,6) , f(2,1,4) + 1} 
         = max { max { f(1,3,6), f(1,2,3) + 1 } , max { f(1,1,4) , f(1,-1,2) + 1 } + 1 }
         = max { max { max { f(0,3,6) , f(0,0,3) + 1} , max { f(0,2,3), f(0,-1,0) + 1} +1 },
                 max { max { f(0,1,4), f(0,-2,1) + 1 } , -infinity } +1 } 
         = max { max { max { 0, 1}, max { 0,-infinity} + 1 }, 
                 max { max { 0, -infinity } , -infinity } + 1 }
         = max { max { 1,0 } + 1 }, max { 0, -infinity } + 1 }
         = max { 2,1} = 2