考虑下述背包问题的实例。有5件物品,背包容量为100。

为何61选C,考虑0/1背包问题,不是可以放入2,3,4物品总价值为605吗,为什么不选A?

贪心算法,在对问题求解时总是做出在当前看来是最好的选择(但结果未必是最好)
典型的算法:Prim算法和Kruskal算法

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,
这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解.
典型的算法:汉诺塔,二分搜索

动态规划,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法
典型的算法:背包问题

回溯算法也叫试探法,它是一种系统地搜索问题的解的方法
典型算法:八皇后问题

按单位重量价值最大优先策略入包,就是当前看来最好(结果不一定最好)
这里采用的是贪心算法,
考虑0/1背包问题,入包的是1,2,3最大价值是430(50+200+180)
考虑部分入包的话,入包的是1,2,3,4(4入包40)最大价值是630(50+200+180+225/45*40)

2,3,4最大价值的确是605,但那不是用贪心算法计算来的
所以答案是C追问

题目问的不是考虑0/1背包问题吗?

追答

是的,按单位重量价值最大优先策略入包,这个思想是采用的是贪心算法不是动态规划,也不是回溯,考虑0/1背包(这个意思要么都入包,要么都不入)

按照贪心算法,单位价值最大的,
第一次入包的是物品1,这个时候包的价值最大50,重5
第二次入包的是物品2,这个时候包的价值最大250,重30
第三次入包的是物品3,这个时候包的价值最大430,重60
第四次,物品的重量是45,包重60,不能入包
第5五次,物品的重量是50,包重60,不能入包
完成背包,结果入包的是1,2,3最大价值是430(50+200+180)

其他算法能找出605这个解,但是贪心算法不能,我知道,上面找完一次,再从第二个物品开始再入包,依次i个物品都入找一次,结果就能找到605

温馨提示:答案为网友推荐,仅供参考