经典背包问题:
现有n件物品和一个容量为c的背包。第i件物品的重量是重量为w[i],价值是v[i]。已知对于一件物品必须选择取(用1表示)或者不取(用0表示),且每件物品只能被取一次(这就是“0-1”的含义)。求放置哪些物品进背包,可使这些物品的重量总和不超过背包容量,且价值总和最大。
这道题目的重点就是,每件物品只能被取一次,也就是说,每件物品,只有取或者不取两种情况。如果换一种情况,每一种物品可以取不止一次,那么题目的复杂程度将会大大增加。
按照每件物品取或不取这样的算法来计算,按照简单的排列组合,n件物品,那么需要的时间复杂度为O(),随着N的增大,时间复杂度呈指数级增加。
我们假设一种情况,一共有六种物品,讲它们的重量和价值按照(重量,价值)的方式罗列,分别是{(2,6),(2,3),(3,4),(4,5),(4,3),(5,7)},同时背包的最大容量为10,我们可以按照背包的最大容量和物品数量,创建一张10x6的表格
(重量,价格) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
(2,6) | |||||||||||
(2,3) | |||||||||||
(3,4) | |||||||||||
(4,5) | |||||||||||
(4,3) | |||||||||||
(5, |