完全背包详解

简介: 完全背包: 完全背包(CompletePack): 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

完全背包:

完全背包(CompletePack): 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

完全背包按其思路仍然可以用一个二维数组来写出:

f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v}

同样可以转换成一维数组来表示:

伪代码如下:

for  i=1..N

    forv=0..V

        f[v]=max{f[v],f[v-c[i]]+w[i]}

 

 
 

 

顺序!

想必大家看出了和01背包的区别,这里的内循环是顺序的,而01背包是逆序的。
现在关键的是考虑:为何完全背包可以这么写?
在次我们先来回忆下,01背包逆序的原因?是为了是max中的两项是前一状态值,这就对了。
那么这里,我们顺序写,这里的max中的两项当然就是当前状态的值了,为何?
因为每种背包都是无限的。当我们把i从1到N循环时,f[v]表示容量为v在前i种背包时所得的价值,这里我们要添加的不是前一个背包,而是当前背包。所以我们要考虑的当然是当前状态。

目录
相关文章
|
3月前
多重背包问题
多重背包问题
33 0
|
3月前
完全背包问题
完全背包问题
28 0
动态规划之01背包问题和完全背包问题
动态规划之01背包问题和完全背包问题
|
8月前
|
算法 C语言 C++
【动态规划】背包问题(01背包,完全背包)
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。
96 0
|
9月前
动态规划——01背包问题、完全背包问题
动态规划——01背包问题、完全背包问题
67 0
|
9月前
动态规划——多重背包、分组背包
动态规划——多重背包、分组背包
41 0
|
11月前
背包问题——01背包|完全背包 2
背包问题——01背包|完全背包
139 0
|
11月前
|
算法 决策智能
背包问题——01背包|完全背包 1
背包问题——01背包|完全背包
239 0
|
测试技术
动态规划之背包问题——背包三讲(01背包,完全背包,多重背包)(二)
动态规划之背包问题——背包三讲(01背包,完全背包,多重背包)(二)
230 0
动态规划之背包问题——背包三讲(01背包,完全背包,多重背包)(二)
|
JavaScript 测试技术 vr&ar
动态规划之背包问题——背包三讲(01背包,完全背包,多重背包)(一)
动态规划之背包问题——背包三讲(01背包,完全背包,多重背包)(一)
105 0
动态规划之背包问题——背包三讲(01背包,完全背包,多重背包)(一)