您的位置:首页 > 其它

01背包问题 详细推导

2013-04-22 22:31 267 查看
01背包(每种物品有且只有一件)

问题重现:

在n件物品取出x件放在空间为m的背包里,每件物品的体积为w1,w2……wn,与之相对应的价值为p1,p2...pn

从其中选出若干物品装入背包可使这些体积总和不超过背包容量,求出获得最大价值的方案。

子问题状态定义:c[i][m]表示在前i(包括i)件做出选择后放入容量为m的背包的最大价值

状态转移方程为:c[i][m]=max{c[i-1][m],c[i-1][m-w[i]]+p[i]}

备注:背包容量m,物品编号i,对应物品价值p[i],对应物件体积w[i]

证明:

第i件物品放或者不放,分为两种情况,最终取二者中价值最大者

①放入:说明总价值需要重新计算。也就是转换为前i-1件物品放入容量为m-w[i]的情形,当然还需要加上第i件物品的价值。即:c[i-1][m-w[i]]+p[i];

②不放:这样的话就只取决于前i-1件物品放入容量为m的情形。即:c[i-1][m]

优化:

①去除所有容量大于m的物品

②去掉所有一眼看过去就知道性价比不如另一个物品的物品,如w[i]>=w[j] && p[i]<=p[j]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: