01背包
#include
#include
#include
#include
#include
#include
#include
#include
完全背包
基础版
#include
#include
#include
#include
#include
#include
#include
#include
完全背包优化1
#include
#include
#include
#include
#include
#include
#include
#include
完全背包优化成一维数组
#include
#include
#include
#include
#include
#include
#include
#include
多重背包
多重背包(Multiple Knapsack Problem)是背包问题(Knapsack Problem)的一个变体,它是一个经典的组合优化问题。在多重背包问题中,您有一组物品,每个物品都有一个重量、一个价值和一个可用数量限制。您需要在给定一个背包容量的情况下,选择物品以最大化总价值。
与普通背包问题不同,多重背包问题允许您选择多个相同类型的物品,而不仅仅是一个。这意味着您可以在背包中放置多个相同种类的物品,但受到每种物品数量的限制。
基础版
#include
#include
#include
#include
#include
优化版(二进制优化)
#include
#include
#include
#include
#include
#include
#include
#include
分组背包
所谓分组背包,即在选择物品的时候,一开始将物品分为好几组,在选择时,可以从每一组中至多选择一件物品,问如何获得最大的价值,所以我们每次可以枚举这个组数,用i表示第几组,用j表示体积,用k来表示选择的物品,伪代码如下
for (int i = 0到组数)
for (int j = max_v到0)
for (int k = 此组所有物品)
f[j] = max (f[j], f[j - v[k]] + w[k])
#include
#include
#include
#include
#include
#include
#include
#include
混合背包
#include
#include
#include
#include
#include
#include
#include
#include