【问题标题】:find the row with the largest sum in a matrix dynamic programming在矩阵动态规划中找到总和最大的行
【发布时间】:2016-06-17 18:44:34
【问题描述】:

我有一个矩阵,我必须找到总和最大的行。该算法应使用动态规划。

4 5 3 2 1
2 2 7 2 5
1 4 2 5 6
9 1 2 1 6

数字需要直接或对角连接。 我的想法是搜索每一行中的最大数字,并检查它是否直接或对角连接到下一行的最大数字。如果不是,我回去,取下一个较小的数字并再次检查。但我注意到我的想法不是使用动态编程。这是我唯一的想法。

我希望你能帮助我。

【问题讨论】:

  • 问题是,如果你保存子树,你可以节省很多计算。例如,在选择 (5 7 4 9) 之后,您尝试 (4 2 4 9) 所以最后一个 (4 9) 是相同的。

标签: matrix dynamic-programming


【解决方案1】:

我提到了这种 dp 方法,但它可以进一步优化:

设给定数组为:

a11 ... a1n
.
.
. 
am1 ... amn

解决办法是:

s11 ... s1n
.
.
. 
sm1 ... smn

你可以从第一行开始找到soln。对于该行中的每个元素。这是您的小事例,ans 将与第 1 行相同。

s11 = a11
..
s1n = a1n

现在是第 2 行。

s21 = max(s11, s12) + a21;
s22 = max(s11, s12, s13) + a22;
s23 = max(s12, s13, s14) + a23;
.
.

现在一般来说:

s[m][n] = max(s[m-1][n-1], s[m-1][n], s[m-1][n+1]) + a[m][n];

想法是跟踪以特定元素 a[x][y] 结尾的 ans。现在只能从 a[x-1][y-1] 或 a[x-1][y] 或 a[x-1][y+1] 到达。

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 1970-01-01
    • 2023-03-06
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多