通过数组找到最便宜的路径(递归)



我目前正在研究递归,我一直被这个问题困住:

通过递归找到数组中最便宜的路径。例如,如果我有一个数组[0,1,3,4,1],我从值0开始。现在我有两个选择,我可以跳到索引2,或者直接移动到索引1。在这种情况下,我将直接跳到索引2(值3),然后跳到索引4(值1),因为3+1= 4,这将是通过数组的最便宜的方式。

我试图将移动索引值与跳跃索引值进行比较,看看哪个是最小的,但在这种情况下,这是行不通的,因为如果我将移动值(1)与跳跃值(3)进行比较,1是最小的,我的程序将把它作为正确的路径,而实际上它不是,3是一个更好的选择。

感谢您花时间帮助我!

您可以使用动态规划来解决这个问题。假设我们创建了一个数组dp,其中dp[i]表示到达位置i的最小代价。我们可以使用下面的语句将这个数组填充到输入的大小:

for(i=1;i<=len;i++) 
   //we can reach at current position either by i-1 or by i-2
   //choose one which gives minimum cost and +arr[i] cost of current position
   dp[i] = min(dp[i-1],dp[i-2])+arr[i]

我们可以通过移动一步到达第i个位置或者通过跳2步到达第i-2个位置。这样你就能找到到达最终位置的最小成本。所以dp[len]将是你到达最后位置的最小成本。这里也有一个类似的问题

最新更新