有N件物品和一个容量为V的背包
第i件物品的重量是w[i],价值是v[i]
求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大
在选择装入背包的物品时,对于每种物品i,只能选择装包或不装包,不能装入多次,也不能部分装入,因此成为0-1背包问题
形式化描述为:给定n个物品,背包容量C>0,重量第i件物品的重量w[i]>0,价值v[i]>0,1≤i≤n
要求找一n元向量(X1,X2,…,Xn,),Xi{0,1},∈使得∑(w[i]*Xi)≤C,且∑v[i]*Xi达最大
即一个特殊的整数规划问题
数学描述为:求解最优值:设最优值m(i,j)为背包容量为j、可选择物品为i,i+1,……,n时的最优值(装入包的最大价值)
所以原问题的解为m(1,C)将原问题分解为其子结构来求解
要求原问题的解m(1,C),可从m(n,C),m(n-1,C),m(n-2,C)
来依次求解,即可装包物品分别为(物品n)、(物品n-1,n)、(物品n-2,n-1,n)、……、(物品1,物品2,……物品n-1,物品n)
最后求出的值即为最优值m(1,C)
若求m(i,j),此时已经求出m(i+1,j),即第i+1个物品放入和不放入时这二者的最大值
对于此时背包剩余容量j=0,1,2,3……C,分两种情况:(1)当w[i]>j,即第i个物品重量大于背包容量j时,m(i,j)=m(i+1,j)(2)当w[i]