问题描述:
已知:有一个容量为V的背包和N件物品,第i件物品的重量是weight[i],收益是value[i]。
限制:每种物品只有一件,可以选择放或者不放
问题:在不超过背包容量的情况下,最多能获得多少价值或收益。
/*
* 本代码实现了运用优先队列式分支限界法解决了01背包问题。解决问题的大致思想和前2篇博客的回溯法
* 大致相同,都属于搜索算法,不过实现方式上略有不同。对于子集树问题,利用优先队列式分支限界法
* 的关键之一就是要确定优先级的设置。在本代码中,优先级设置为每个节点处能够取到的价值上界。
* 对于寻找剩余物品的最高价值上界,按照背包中剩余空间依次取剩下的物品,当空间不足以取下一个
* 物品时,则将下一个物品的单位重量价值折算到现在的剩余空间中去计算理想最高上界。计算出某个
* 节点的上界后,比较上界和已经找到的最大值之间的关系。
* 当然,首先要背包中的物品按照单位重量价值进行排序,方便于后面右子树的剪枝操作。
* 在本代码中,省略了该