背包问题之01背包问题
这是一个动态规划经常遇到的问题,如下图所示,实际上我们只考虑0-1背包和完全背包就行,多重背包面试基本遇不到
接下来我们可以看一下对应的模版:
二维数组
确定dp数组以及含义
dp[i][j]:表示在容量为j的情况下从0-i的物品中选出最大的物品容量为多少。
确定递推公式
dp[i][j]=max{ dp[i-1][j], dp[i-1][j-weight(i)]+value(j) }
也就是两种情况:选与不选。
代码模版
// weight数组的大小 就是物品个数
for(int i = 1; i < weight.size(); i++) { // 遍历物品
for(int j = 0; j <= bagWeight; j++) { // 遍历背包容量
if (j < weight[i]) dp[i][j] = dp[i - 1][j];
else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
}
}