码迷,mamicode.com
首页 > 其他好文 > 详细

0-1背包问题1

时间:2016-07-20 19:42:53      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

鼓捣好久 终于了然了一些

 

0-1背包问题描述

  有一个窃贼在偷窃一家商店时发现有n件物品,第i件物品价值为vi元,重量为wi,假设vi和wi都为整数。他希望带走的东西越值钱越好,但他的背包中之多只能装下W磅的东西,W为一整数。他应该带走哪几样东西?

  【注】0-1背包问题中:每件物品或被带走,或被留下,(需要做出0-1选择)。小偷不能只带走某个物品的一部分或带走两次以上同一个物品。

 

采用动态规划算法求解0-1背包问题,

用子问题定义状态:即f[i][ J]表示前i件物品放入一个容量为j的背包可以获得最大价值。则其核心状态转移方程是:

f[i][ j]=max{f[i-1][ j],f[i-1][ j-a[i]]+c[i]}

 

即,“将前i件物品放入容量为j的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为j的背包中”,价值为f[i-1][j];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为j-a[i]的背包中”,此时能获得的最大价值就是f[i-1][ j-a[i]]再加上通过放入第i件物品获得的价值c[i]

具体实现程序详见https://github.com/Wuyanan520/boruishangge/,源码为.ipython文件,为方便您审阅,转存了一份html文件。

0-1背包问题1

标签:

原文地址:http://www.cnblogs.com/sxbjdl/p/5689382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!