01背包学习(1)

经典的动态规划问题是这样:

题目 
N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 

解答函数package(n,w,costs,values)的四个参数分别是物品数量,可容纳最大值,第i个物品花费costs【i】和价值values【i】,要求最大的价值和。

设dp【i】【j】为前i个物品放进容量为j的包里面的最大价值。

转移方程为dp【i】【j】=max(dp【i-1】【j】,dp【i-1】【j-costs【i】】+values【i】)

max函数左边的项表示“不拿走第i件物品”,那么最大价值和拿了前i-1项一样;

右边表示“拿走第i件物品”,那么最大价值是对应的已经拿了的i-1件中将花费costs【i】先拿出背包腾出地方,然后放入i并且加上对应的价值。


猜你喜欢

转载自blog.csdn.net/weixin_37373020/article/details/80977800