4.2.2 蓝桥杯背包问题之完全背包
介绍
完全背包问题是动态规划领域的一个经典问题,广泛应用于算法竞赛和实际编程中。与01背包问题类似,完全背包问题的目标是在不超过背包最大容量的情况下,从给定的物品中选择若干件放入背包以获得最大的总价值。不同的是,在完全背包问题中,每种物品可以选择无限次。
问题模型
给定n
种物品和一个容量为W
的背包。物品i
的重量是w[i]
,价值是v[i]
。求解将哪些物品装入背包,可使这些物品的总重量不超过W
,且总价值最大。
算法思路
完全背包问题的基本思路与01背包相似,但关键区别在于每种物品可以选取多次。因此,在考虑“是否选择当前物品”时,我们需要考虑所有可能选取的数量。
动态规划状态定义
定义dp[i][j]
为考虑前i
种物品,在容量为j
的背包中能达到的最大价值。
状态转移方程
dp[i][j] = max(dp[i-1][j], dp[i][j-w[i]] + v[i])
该方程表示,对于第i
种物品,我们可以选择不放入(保持dp[i-1][j]
),或者放入至少一件(