题解 | #01背包#
01背包
https://www.nowcoder.com/practice/2820ea076d144b30806e72de5e5d4bbf
#include <vector>
class Solution {
public:
int knapsack(int V, int n, vector<vector<int> >& vw) {
// 首先,先创建一个二维数组,dp【i】【j】 表示前i个物品所能使得容量为j的背包的重量的最大值
vector<vector<int>> dp(n+1, vector<int>(V + 1));
if(V == 0 || n == 0) return 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= V; j++){//j表示背包的容量
if(j < vw[i - 1][0]) dp[i][j] = dp[i - 1][j];//当当前的背包容量小于第i个物品的体重,就直接不加入第i物品
else{
dp[i][j] = max(dp[i - 1][j - vw[i -1][0]] + vw[i - 1][1], dp[i - 1][j]);
}//这个表示当取第i个物品时,以为背包的容量没那么大了,你要找背包容量减去第i个物品的容量所能容纳的最大重量也就是dp[i - 1][j - vm[i - 1][1]] 后面的这个vm[i - 1][1]表示的是第i个物品的重量
}
}
return dp[n][V];
}
};
