#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];
    }
};