01背包问题

来源:互联网 发布:咨询师网络教育平台 编辑:程序博客网 时间:2024/06/08 11:45

记得大二刚开始接触 ACM 的时候就知道了背包问题了,但是只了解了基本的原理,对于深入的扩展性质茫茫然不知所以,真的是有种身在云端脚下无实物的恐惧感。勿以往之不谏,知来者之可追,自信心源于做题和熟悉代码,大三自己要把基本代码敲一遍,基本算法性质熟悉一遍。为追目窥算法真理用力奔跑吧~~

背包问题的基本性质:背包问题(Knapsack problem)是一种组合优化NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。

  给定一个背包,容量为C,有n个物品,重量为W[n]

背包问题可以由动态规划来求解。

    根据上面的分析,我们可以得到如下的递归式:

    当wn>C时,  f(n,C)=f(n-1,C);

    当wn<=C时,f(n,C) = max(f(n-1,C), vn+f(n-1, C-wn) );

    初始条件为:f(i, 0) = 0; f(0,i) = 0; f(0,0) = 0;


啥也别说,做题




原创粉丝点击