当前位置: 首页 > 知识库问答 >
问题:

具有正负成本的成本矩阵中的最小成本路径

齐文栋
2023-03-14

这是最小成本路径动态规划问题的一个变体,让我难倒了。

我得到了一个成本矩阵MXN。成本矩阵有随机放置的正缓冲区和负成本。我从[1,1]开始,必须到[m,n]。我从一个初始缓冲区x开始。在我的遍历过程中,我的缓冲区x永远不应该<=0。如果它变成<=0,那么即使结束状态是一个正缓冲区,也是一个无效的路径(把它想象成一个玩家从一些初始健康开始,负成本扣除健康,而正缓冲区增加健康)。什么是最小的初始缓冲区,我可以开始使它达到[m,n],而没有0缓冲区之间的任何地方(例如,最小的初始生命值,以便玩家可以完成路径而不死亡)

共有1个答案

林英锐
2023-03-14

假设h[i,j]是玩家从正方形开始(i,j)时所需的最小健康值。我们对h[1,1]感兴趣,这是从起始方块开始所需的最小健康状态。

我假设成本矩阵M中的所有值都是整数。因此,最小的正健康是1。

踩最后一个方块之前所需的健康值很容易:如果该方块中的值为正,我们需要1,否则我们至少需要比减去的值更多:

H[m, n] = max(1 - M[m, n], 1)
H[m, i] = max(H[m, i+1] - M[m, i], 1)
H[j, n] = max(H[j+1, n] - M[j, n], 1)
H[i, j] = min(max(H[i, j+1] - M[i, j], 1),
              max(H[i+1, j] - M[i, j], 1))
int[] H = new int[m, n];

H[m, n] = max(1 - M[m, n], 1);

// remember to loop backwards
for (int i = m-1; i >= 1; i--)
    H[m, i] = max(H[m, i+1] - M[m, i], 1);
for (int j = n-1; j >= 1; j--)
    H[j, n] = max(H[j+1, n] - M[j, n], 1);

// again, loop backwards
for (int i = m-1; i >= 1; i--)
    for (int j = n-1; j >= 1; j--)
        H[i, j] = min(max(H[i, j+1] - M[i, j], 1),
                      max(H[i+1, j] - M[i, j], 1));

return H[1, 1];
 类似资料:
  • 问题链接 如果我们被允许在所有可能的方向上遍历,而不是这里允许的三个方向…现在如何解决这个变体…我试着想回溯,但它不起作用…任何想法!!!!!!!!!!

  • 我想使用python最小成本流解算器来构建新的网络。这意味着我有一个初始的完整图,顶点要么是供应商,要么是有需求的。使用该算法应该告诉我,根据它们的成本,将使用哪些边来解决所有需求。与现有问题不同的是,一条边在使用时的成本不仅用单位成本来描述,而且还有一条边的投资,该投资与流量无关。我一直在研究networkx和/或工具的源代码,但不知道如何调整这些代码以实现Edge的投资成本。是否有人有更好的想

  • 我使用的是Weka 3.7.1 我试图使用weka分析棒球运动预测。我想使用成本矩阵,因为在我赌博的体育书籍中,不同结果的成本是不一样的。我的数据集很简单:它是一组具有标称类{WIN, LOSS}的预测。对于这个问题,属性不是问题。 在WEKA资源管理器中,加载我的arff文件后,我可以从 分类- 以下是我想输入到成本矩阵中的值: 正确分类为损失,成本为0(我没有下注) 注意,为了保持“成本矩阵”

  • 我有一个最小成本流网络,其中一些弧有固定费用,也就是说,如果弧有非零流量,那么成本是c\u k,与流量无关。0的流产生0的成本。这些圆弧没有容量限制。 我知道如何将其建模为一个混合整数程序(MIP):添加一个0/1变量,成本为c\k。将arc上的容量设置为M*y\U k,其中M大于所有电源的总和。因此,当且仅当弧有流时,才会产生固定成本。 是否可以使用最小成本流公式来解决此问题,该公式比一般MIP

  • 我正在尝试使用MinCostFlow或工具解决一个工程问题。有一个带有管道和多个供应阀的机械分配系统。这些阀门需要连接到用户。起初,我试图用匈牙利算法来解决这个问题,但后来我意识到,这并不考虑通过路径的流。 节点0-4是消费者,节点4-7是供应阀,节点8和9是管道。我在每个消费者身上放了一个“供应”,以显示它期望的流量。我在最后放了一个水槽,以将供应从系统中取出。并非所有消费者都有相同的需求。我们

  • 给出了一系列成本。你可以向前跳两次,也可以向后跳一次。如果你在一个特定的指数上着陆,你必须把成本加到你的总数上。找到穿过数组或到达数组末端所需的最小成本。 输入: 输出: 说明:我们从指数1开始,跳到3然后跳出来,总成本为8 4=12。 我们如何为此构建DP解决方案?