动态规划算法可视化
动态规划过程
算法代码
1vector<vector<int>> knapsack01(vector<int>& weights, vector<int>& values, int capacity) {2 int n = weights.size();3 // 创建DP表格4 vector<vector<int>> dp(n + 1, vector<int>(capacity + 1, 0));56 // 填充DP表格7 for (int i = 1; i <= n; i++) {8 for (int w = 0; w <= capacity; w++) {9 if (weights[i-1] <= w) {10 // 可以选择当前物品11 dp[i][w] = max(12 values[i-1] + dp[i-1][w-weights[i-1]],13 dp[i-1][w]14 );15 } else {16 // 无法选择当前物品17 dp[i][w] = dp[i-1][w];18 }19 }20 }2122 return dp;23}
算法说明
0-1背包问题是一个经典的动态规划问题。给定一组物品,每个物品都有自己的重量和价值, 在限定的总重量内,选择物品使得物品的总价值最大。每个物品只能选择一次(要么选,要么不选)。 时间复杂度为O(nW),其中n是物品数量,W是背包容量。