以下代码实现了0/1背包问题的动态规划解法。假设物品重量为weights[],价值为values[],背包容量为W,横线上应填写( )。
1 int knapsack(int W, vector<int>& weights, vector<int>& values) { 2 int n = weights.size(); 3 vector<vector<int>> dp(n + 1, vector<int>(W + 1, 0)); 4 5 for (int i = 1; i <= n; i++) { 6 for (int j = 1; j <= W; j++) { 7 if (weights[i-1] > j) { 8 dp[i][j] = dp[i-1][j]; // 当前物品装不下 9 } else { 10 dp[i][j] = max(_________________________); // 在此处填入代码 11 } 12 } 13 } 14 return dp[n][W]; 15 }
dp[i-1][j], values[i-1]
dp[i-1][j], dp[i-1][j - weights[i-1]] + values[i-1]
dp[i][j-1], values[i-1]
dp[i-1][j - weights[i-1]] + values[i-1], dp[i][j-1]