【问题标题】:Using dynamic programming to find minimal sum in matrix使用动态规划找到矩阵中的最小和
【发布时间】:2023-03-06 09:38:01
【问题描述】:

我需要在我的程序中实现这一点,假设我们给定了大小为 N*M 的矩阵,其中 N

现在我们必须找到最小和,这样我们就应该从每一列中准确地选择一个元素,并且我们不能从同一行中的不同列中选择两个元素

例如,设 N = 3 , M =2 我们有矩阵

[3, 0],

[6, 9],

[5, 9],

我们可以选择 3+9、6+0、6+9、5+0、5+9,但不能选择 3+0。

我知道我可以用 N^M 时间复杂度的递归来解决,但我需要更快的解决方案,请给我一些提示。

【问题讨论】:

  • 你确定动态规划是关键吗?不知道为什么会这样。
  • 我不确定,但我认为动态编程是关键,因为我们必须小心地暴力破解它们

标签: matrix dynamic-programming


【解决方案1】:

让我们遍历从 1 到 N 的所有行。我们的动态编程状态将是对 (i, j),其中 i 是行号,j - 已使用列的位掩码(列在掩码中从零开始) .我们将找到函数F(i, j) 的值 - 最小总和,可以使用前 i 行并从以 j 编码的列中获取元素来实现。答案将是F(N, (1<<M) - 1) 的值。复发:

F(0, 0) = 0
F(0, i) = MAXN, where i > 0        
F(i, j) = min(F(i-1, j), F(i-1, j ^ (1<<k)) + Matrix[i][k+1]), where 0<=k<M, j & (1<<k) != 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2014-01-06
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2017-02-20
    • 2021-06-22
    相关资源
    最近更新 更多