给出下面的数据,找到从左下到右上的最高价值路线。
[{ 0, 0, 0, 6 },
{ 2, 0, 0, 2 },
{ 0, 1, 1, 1 },
{ 3, 0, 0, 0 }]
go can only move right (east) or up (north)
Highest value route here is 3 -> 0 -> 1 -> 1 -> 1 -> 2 ->6 = 14
我应该如何解决这个问题。我下面的伪代码方法正确吗?
max = 0
array = defined_array
i = len(array)
k = 0
def path(i,j):
total = 0
for j in range(4):
k = j;
total = total + int(array[i][j])
if total > max:
max = total
return path(--i,k)
key= 3
def path(i,j):
for i in range(i):
for j in range(array[i]):
total = total + array[i][j]
答案 0 :(得分:1)
我根本不了解你的方法。
这是简单动态编程问题。
将此视为2D数组 Arr [4] [4]
[{ 0, 0, 0, 6 },
{ 2, 0, 0, 2 },
{ 0, 1, 1, 1 },
{ 3, 0, 0, 0 }]
制作另一个4 * 4的dp数组
首先需要初始化基本情况。
所以第一列和最后一行是我们的基本情况。
dp[0][3]=Arr[0][3];
在此之后的第一列
dp[i][0]=dp[i+1][0]+Arr[i][0];
对于最后一行
dp[3][i]=dp[3][i-1]+Arr[3][i];
其他值
dp[i][j]=max(dp[i][j-1],dp[i+1][j])+Arr[i][j];
我们将选择最大值。
我们的dp数组如下所示,答案将为14
[{ 5, 5, 5, 14 },
{ 5, 5, 5, 8 },
{ 3, 4, 5, 6 },
{ 3, 3, 3, 3 }]
答案 1 :(得分:0)
这基本上是通过图形查找最佳路径(在这种情况下为最高价值的路径)的问题。
有一些用于查找最短路径的方法,例如Dijkstra's algorithm和Bellman–Ford algorithm。
对于有向图和无环图(“ DAG”),我发现两个讨论here和here指出,不能仅将这些算法从最小值“颠倒”为找到最长的算法路径,但如果将每个权重(值)都反转为负数的图形进行转换,它确实可以工作。