题目:一个背包有一定的承重cap,有N件物品,每件都有自己的价值,记录在数组v中,也都有自己的重量,记录在数组w中,每件物品只能选择要装入背包还是不装入背包,要求在不超过背包承重的前提下,选出物品的总价值最大。给定物品的重量w价值v及物品数n和承重cap。请返回最大总价值。
测试样例:[1,2,3],[1,2,3],3,6返回:6
思路:01背包问题,一个典型的动态规划问题,题目意思很简单,N件物品,每一件有自己的重量和自己的价值,分别用一个数组给出,背包有一个限制总重量为cap,要求在满足重量不超过cap的前提下,向背包中装入物品,使得总的价值最大,求出最大价值,不需要知道最大价值的方案。
由于每件物品有且仅有放或者不放这2个选项,即0或者1,因此可通过暴力遍历的方式来解决,但是显然时间复杂度爆表,这种复杂的实际问题通常就是使用动态规划来解决。
将问题拆解为求一系列dp[i][j],即使用前i个物品,在重量不超过j时的最大价值为dp[i][j],注意,对于物品i显然取值范围为0~n-1表示使用物品数组中下标为0~n-1物品;对于重量,由于只给定了最大的范围cap,但是在分解问题时应该将其从0开始枚举,即枚举重量从0开始直到cap,总共有cap+1个值,同理对于找零钱问题,只给定了一个最大值aim,但是在分解为题时应该从0开始直到aim考虑aim+1个值。
对于第一行的值,表示使用第一将物品w[0],来装包,显然当容量小于w[0]时无法装入因此价值为0,之后可以装入,于是最大价值显然就是v[0]=4;
对于第一列的值,表示使用前i个物品来装包,当容量为0时的最大价
动态规划解01背包问题

博客探讨了如何使用动态规划解决01背包问题。在不超过背包承重的情况下,选择物品以最大化总价值。通过创建二维数组并计算不同状态下的最大价值,最终得出最优解。动态规划的四步曲包括初始化数组、计算基础值、遍历计算和得到结果。
最低0.47元/天 解锁文章
1067

被折叠的 条评论
为什么被折叠?



