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