dynamic-programming - 0/1 最低成本的背包

标签 dynamic-programming knapsack-problem

名家0/1背包问题的重点是在给定的 Weight (W) 中获得最大成本/值(value).

上面的代码是这样的::

n = cost_array / weight_array size
INIT :: fill 0th col and 0th row with value 0
for (int i=1; i<=n; i++) {
            for (int j=1; j<=W; j++) {
                if (weight[i-1] <= j) {
                    dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j - weight[i-1]] + cost[i-1]);
                }else {
                    dp[i][j] = dp[i-1][j];
                }
            }
        }

回答::dp[n][W]
新问题 ::所以,这里我们计算的是最大成本/值(value)。但是如果我想找到最小成本/值(value)怎么办(它仍然只是有界背包)。

我认为问题归结为我如何做 INIT上面的步骤。在循环中,我认为它会保持不变,唯一的区别是 Math.max成为Math.min
我试过 INIT步入 Infinity , 0等,但无法构建迭代解决方案。
我们怎么可能做到这一点?

最佳答案

@radovix 提到的写作答案

  • 将每个权重转换为负数并编写相同的算法。
  • 关于dynamic-programming - 0/1 最低成本的背包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61704098/

    相关文章:

    algorithm - 找到数组中 n 个元素的最大总和,使得不超过 k 个元素相邻

    algorithm - 多项目有界背包算法

    algorithm - 动态规划计算子集和(背包)中子集解的个数

    algorithm - 资源分配 w.r.t.个人能力 - 这是一个背包问题吗?

    python - 无法在python中实现动态规划表算法

    python - 如何从递归函数中获取数据?

    algorithm - 折叠背包,容量变化是根据选择的元素而不是数量

    algorithm - 查找列表中的最小值数以求和为值

    algorithm - 归约算法 - 将任何 SGI 问题重铸为子集和

    .net - 如何在运行时或编译时替换自动实现的 c# get body?