这是我认为我需要做的事情。
鉴于'n'重量'Wi'和价值'Vi',我需要在保持重量限制WEIGHT_MAX的同时最大化背包的价值。
所以,我想做的是,根据物品的价值(从高到低)对物品进行分类,然后只要背包的重量小于WEIGHT_MAX就选择物品。 / p>
即。像这样的东西
while( temp_weight <= WEIGHT_MAX && i <= INDEX_MAX )
{
if ( temp_weight + W[i] > WEIGHT_MAX ) { i++; continue;}
temp_weight += W[i];
value += V[i];
i++;
}
为什么这个算法错了?
答案 0 :(得分:1)
考虑这些已排序的元素:
Vi = {10,5,5,5,5,5,5}
Wi = {4,1,1,1,1,1,1}
如果您的WEIGHT_MAX为4,则使用算法,您只需选择V = 10元素(总值10)。但最佳解决方案是4个元素,V = 5(总值20)。
这就是为什么你的算法没有达到最佳效果的原因。