题目:一个背包有一定的承重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物品;对于重量,由于只