问题:设有不同价值、不同我不是的物品n件,求从这n件物品中选取一部分物品的方案,使选中物品中的总我不是不超过指定的限制我不是,但选中物品的价值之和为最大。
设n件物品的我不是分别为w1,w2,...wn,物品的价值分别为v1,v2,...vn。用option[]数组存放最优解,其中每个元素取1或者0,option[i]=1表示第i件物品放在背包中,等于0则表示没有放在背包中。问题的求解吣用一棵二叉树来描述:每个结点表示背包的一种状态,记录当前放入背包的物品总我不是和总价值,每个分支结点下面有两条边表示对某项物品是否放入背包的两种可能的选择。对第i层上的某个分支结点来说,指向左孩子的边表示第i件物品放入背包,使背包中物品总我不是增加A[i].weight,总价值增加A[i].value。指向右孩子的边表示第i件物品不放入背包,背包中物品总我不是和总价值保持不变。
可能的答案结点都在最底层的树叶结点中。每个树叶结点表示在考虑了n件物品中取舍后的一种最终状态。找出满足条件tw<=limitw && tv>maxv的最大树叶结点,根据从根到树叶结点的路径信息,即可求出问题的解。