背包问题是算法设计中一个经典的优化问题,而01背包问题则是其中一种具有代表性的情形。这个问题要求在给定容量的背包中选择一些物品,以便在限制的容量内获得最大的总价值。动态规划是解决这类问题的有效方法之一。以下是一个高效的C++实现,通过动态规划解决01背包问题:

#include 
#include 
using namespace std;

int knapsack(int capacity, vector&; weights, vector&; values) {
    int n = weights.size();
    vector dp(capacity + 1, 0);

    for (int i = 0; i <; n; ++i) {
        for (int j = capacity; j >;= weights[i]; --j) {
            dp[j] = max(dp[j], dp[j - weights[i]] + values[i]);
        }
    }

    return dp[capacity];
}

int main() {
    // 在这里初始化背包容量、物品重量和价值的向量
    // 调用knapsack函数获取最大总价值
    return 0;
}

这段代码采用了一维数组dp来降低空间复杂度,并在每次迭代中进行状态转移,使得算法更加高效。在实际应用中,通过在main函数中适当初始化相关参数,我们可以轻松地使用这个算法来解决01背包问题。