背包问题描述

01背包

  1. 加入有一个物品的列表 T = ( T 1 , T 2 , . . . , T n ) T=(T_{1},T_{2}, ..., T_{n}) T=(T1,T2,...,Tn) ,
    每个物品的价格是 P i = P ( T i ) P_{i}=P(T_{i}) Pi=P(Ti) 。每个物品的重量是 W i W_{i} Wi
  2. 问题:给你一个背包,但是背包只能装载总重为 W W W
    的物品,请问如何选择物品 T T T 装入背包,使得背包中的物品价值最大。

完全背包问题

注意01背包问题,每种物品只允许选一件。而完全背包问题,对于每一种物品的可选数量不限。

多重背包

多重背包问题,是每种物品的数量有限制 C i C_{i} Ci

动态规划中,背包问题是一个经典的优化问题,它可以分为0-1背包问题和完全背包问题两种类型。 1. 0-1背包问题: 假设有一个背包,它的容量为C。现在有n个物品,每个物品的重量分别为w1, w2, ..., wn,价值分别为v1, v2, ..., vn。要求选择一些物品放入背包中,使得在不超过背包容量的前提下,背包中物品的总价值最大化。 这里的0-1表示每个物品要么放入背包中,要么不放入。 2. 完全背包问题: 与0-1背包问题类似,但不同之处在于每个物品可以选择放入背包多次(数量无限),即每个物品的选择是一个无限的选择。 解决这两类背包问题的常用方法是使用动态规划动态规划的基本思想是将原问题拆解成若干子问题,并通过求解子问题的最优解来求解原问题的最优解。 具体来说,对于0-1背包问题,可以使用一个二维数组dp[i][j]来表示前i个物品放入容量为j的背包中所能获得的最大价值。状态转移方程如下: dp[i][j] = max(dp[i-1][j], dp[i-1][j-wi] + vi) 其中,dp[i-1][j]表示不选择第i个物品时的最大价值,dp[i-1][j-wi] + vi表示选择第i个物品时的最大价值。 对于完全背包问题,可以使用一个一维数组dp[j]来表示容量为j的背包所能获得的最大价值。状态转移方程如下: dp[j] = max(dp[j], dp[j-wi] + vi) 其中,dp[j]表示不选择第i个物品时的最大价值,dp[j-wi] + vi表示选择第i个物品时的最大价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值