参考:https://blog.csdn.net/uestclr/article/details/50760563
问题描述
背包问题,动态规划经典问题,一个背包有滴定的承重W,有N件物品,每件物品都有自己的价值,记录在数组V中,也都有自己的重量,记录在数组W中,每件物品只能选择要装入还是不装入背包,要求在不超过背包承重的前提下,选出的物品总价值最大。
关键逻辑
假设物品编号从1到n,一件一件的考虑是否加入背包,假设dp[x][y]表示前x件物品,不超过重量y的时候的最大价值,枚举一下第x件物品的情况:
情况1:如果选择了第x件物品,则前x-1件物品得到的重量不能超过y-w[x]。
情况2:如果不选择第x件物品,则前x-1件物品得到的重量不超过y。
所以dp[x][y]可能等于dp[x-1][y],也就是不取第x件物品的时候,价值和之前一样,也可能是dp[x-1][y-w[x]]+v[x],也就是拿第x件物品的时候,当然会获得第x件物品的价值。两种可能的选择中,应该选择价值较大的那个,也就是:
dp[x][y] = max{dp[x-1][y],dp[x-1][y-