DP区间

   与零一背包不同的是,零一背包中的物品是不可以重复拿取的,只可以拿取当前物品或者不拿取当前物品,不可以拿取多个,完全背包的物品是可以任意拿取多个的来构成不超过背包容量并且构成的总价值是最大的。
   首先我们是可以使用试探的方式来拿取物品的,对于当前的物品我们可以不拿取,拿取一个,拿取两个...直到不能够拿取当前物品了,动态规划的核心是找到dp公式或者状态转移的方程,理解清楚中间的过程是怎么样进行变化的。
   我们可以这样想:当前我的背包容量有多少,而且我可以选择的物品的范围是什么,那么这两个变量就可以确定一个值了,我们可以计算出当前背包容量对于当前可以选择的物品范围构成的最大价值。
   动态转移方程为:f[i,j]=max{f[i-1,j-Wi]+Pi (j>=Wi), f[i-1,j]}  
   将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[v];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c的背包中”,此时能获得的最大价值就是f[v-c]再加上通过放入第i件物品获得的价值w。

猜你喜欢

转载自blog.csdn.net/qq_44716990/article/details/89195438