第28280题 单选题
下列关于01背包问题的动态规划空间优化代码,正确的是?

已知01背包问题的常规二维动态规划实现中,状态定义为dp[i][j]表示前i件物品放入容量为j的背包的最大价值,状态转移方程为dp[i][j] = max(dp[i-1][j], dp[i-1][j - weight[i]] + value[i])。现需将二维DP数组优化为一维数组以将空间复杂度从O(n*V)降至O(V),其中n为物品数量,V为背包总容量。假设一维DP数组名为dp,下标对应背包容量,下列代码片段正确的优化实现是?

A
for (int i = 0; i < n; i++) {
    for (int j = 1; j <= bagCapacity; j++) {
        if (j >= weight[i]) {
            dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
        }
    }
B
for (int i = 0; i < n; i++) {
    for (int j = bagCapacity; j >= weight[i]; j--) {
        dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
    }
C
for (int i = 0; i < n; i++) {
    for (int j = weight[i]; j <= bagCapacity; j++) {
        dp[i][j] = max(dp[i][j], dp[i][j - weight[i]] + value[i]);
    }
D
for (int j = bagCapacity; j >= 0; j--) {
    for (int i = 0; i < n; i++) {
        if (j >= weight[i]) {
            dp[j] = dp[j - weight[i]] + value[i];
        }
    }
程序运行统计
暂无判题统计
提交0次 正确率0.00%
答案解析