摘要:
我们先来看分组背包问题 有N件物品和一个容量为V的背包,第i件物品的重量为c[i],价值为w[i],这些物品被划分成了若干组,每组中的物品互相冲突,最多选一件 问将哪些物品放入背包中可以使背包获得最大的价值 我们用f[k][v]表示前k种物品花费费用v所能取得的最大价值 给出状态转移方程: 可以看出 阅读全文
摘要:
顾名思义,二维费用的背包中的每种物品有两种费用 设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值 那么我们很容易给出状态转移方程,加一维状态即可 在这里,如果每种物品只可以取一次采用类似于01背包滚动数组的循环方式,即逆序循环 如果每种物品可以取无数次采用完全背包滚动数 阅读全文
摘要:
我们首先来介绍一下多重背包是什么 可以这样理解:01背包≤多重背包≤完全背包 01背包每种物品最多选一件 完全背包每种物品可以选无数件,但受限制于背包的容量 多重背包每种物品可以选的件数是给出的,同样也受限制于背包的容量 多重背包在实现的时候可以进行二进制优化,大致思路是放多件的情况可以进行拆分成几 阅读全文
摘要:
有N种物品和一个容量为V的背包,每种物品的数量无限,第i种物品的重量为c[i],价值为w[i],将若干件物品装入背包,求背包所放物品的最大价值 这时每种物品都有取0件,取1件,取2件等若干种情况 采用朴素的实现方式是类比01背包的状态转移方程,我们给出这样的形式,我们令f[i][v]表示前i件物品恰 阅读全文
摘要:
有N件物品和一个容量为C的背包,第i件物品的费用是c[i],价值是w[i],求将若干件物品放入背包所能够获得的最大价值。 每种物品只有一件,可以选择放或者是不放 使用f(i,v)表示前i件物品恰好放入一个容量为v的背包所能获得的最大价值 状态转移方程: 时间复杂度为O(N*V),空间复杂度可以优化为 阅读全文